Delphi + Twebbrowser + HTML
HEJPå Jobben har jeg en ÆLD-GAMMEL sekventiel base (det er ikke SQL eller andet kendt format) hvor data præsenteres som HTML i FRAME - format.
Formatet er opbygget omkring 3 FRAMES (ent sideframe med manøvrering, en top-frame med "reklamer", og selve hoved-frame'n hvor data vises.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<HTML>
<HEAD>
<TITLE>Tape Database</TITLE>
HEAD>
<FRAMESET border=0 frameSpacing=0 rows=100,* frameBorder=0>
<FRAME name=banner top.htm" noResize scrolling=no target="_top">
<FRAMESET cols=145,*>
<FRAME name=innhold src="manovr.htm" target="_top">
<FRAME name=hoved src="base001.htm">
</FRAMESET>
<NOFRAMES></NOFRAMES>
</FRAMESET>
</HTML>
(Let modificeret til formålet (META tags er slettet etc) )
I "Hovedfilen" (= base001.htm ) har jeg 2 BUTTONS (SUBMIT-typen) hvis VALUE og NAME bestemmer om jeg skal gå frem eller tilbage i samme BASE-fil.
<HTML>
....
....
<FORM action=(anonymiseret) method=get>
<INPUT type=submit value=Neste name=retning> </FORM>
<INPUT type=submit value=Forrige name=retning>
</FORM>
.... HER KOMMER SÅ DE FORSKELLIGE DATABASE ELEMENTER
.....
</HTML>
Det jeg ønsker at at kunne automatisere denne fremadskridende visning (Click på NESTE-button'en) via Delphi.
Hvis Databasen ikke var af FRAME-typen kunne jeg bruge følgende:
procedure TForm1.Button1Click(Sender: TObject);
var
doc : IHtmlDocument2;
i : integer;
ov : OleVariant;
disp : IDispatch;
collection : IHTMLElementCollection;
inputelement : HTMLInputImage;
begin
WB1.ControlInterface.Document.QueryInterface(IHtmlDocument2, doc);
if not Assigned(doc) then
begin
Exit;
end;
ov := 'INPUT';
disp := doc.all.tags(ov);
if Assigned(disp) then
begin
disp.QueryInterface(IHTMLElementCollection, collection);
(* MIT MARKERING *)
if Assigned(collection) then
begin
for i := 1 to collection.Get_length do
begin
disp := collection.item(pred(i), 0);
disp.QueryInterface(HTMLInputImage, inputelement);
if Assigned(inputelement) then
begin
if inputelement.Name = 'retning' then
begin
inputelement.Click;
end;
end;
end;
end;
end;
end;
Men det virker ikke ved frames ...
Lidt debugging har vist at det er ved (* MIN MARKERING *) at "fejlen" sker (sandsynligvis fordi det igen er EN FRAME-løsning) og jeg skal videre herfra ved at gå ind i FRAME #3 <!-- Name = hoved --> via Delphi, lokalisere NESTE-knappen og så ASSIGNE Click-handleren til denne .
Men hvordan gør jeg dette ???
(eller findes der en anden bedre løsning ?? )
Kristian