06. april 2011 - 11:16 Der er 1 løsning

Delphi + Twebbrowser + HTML

HEJ

På 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
31. maj 2011 - 09:29 #1
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester