Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Ereignisse von Twebbrowser zu früh! (https://www.delphipraxis.net/2001-ereignisse-von-twebbrowser-zu-frueh.html)

Jan 2. Jan 2003 14:29


Ereignisse von Twebbrowser zu früh!
 
Hallöchen!
Also ich will, dass ein Element einer Webseite sofort nach dem Laden der Seite angesprochen werden. Allerdings gibt es kein event für den TWebBrowser, der den Zugriff nach dem Kompletten Darstellen der Seite ermöglicht, also bekomme ich natürlich jedesmal eine exeption. Ich könnte mir vorstellen, dass das daran liegt, dass es sich um eine Seite mit frames handelt, und dann die Ereignisse sich alle nur auf den Parent beziehen, welcher natürlich schon geladen ist, wenn die children noch nicht geladen sind.
Need Help!
Gruß
Jan

CalganX 2. Jan 2003 14:33

Wieso? Denn was ist mit NavigateComplete oder DownloadComplete. All das funktioniert problemlos...

Chris

Jan 2. Jan 2003 14:38

Hallo Chakotay1308,
leider nein, wenn ich die Anfrage über einen Buttonklick sende, dann funktioniert sie einwandfrei, aber ondownloadcomplete und onnavigatecomplete resultieren in exeptions.
Gruß
Jan

Jan 2. Jan 2003 15:36

weiss denn da echt keiner was zu? *hoff*
Jan

CalganX 2. Jan 2003 15:39

Versuchs mal mit dem OnProgresss-Ereignis (dann aber mit den Parametern abfragen, ob fertig)...

Chris

Jan 2. Jan 2003 15:49

xcuse me? Erklär mal bitte!
Gruß
Jan

d3g 2. Jan 2003 16:22

Hi Jan,

wenn du mit der Prozedur vom SwissDelphiCenter benutzst, dann funktioniert die in zwei Fällen nicht:
  1. Wenn du nicht die exakte Groß- und Kleinschreibung wiedergibst und
  2. wenn das Feld kein name-Attribut sonder nur noch das neuere id-Attribut hat.
Das kann man umgehen, indem man die Prozedur etwas abändert:
Delphi-Quellcode:
function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
    Exit;
   
  //count forms on document
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do
      try
        //when the fieldname is found, try to fill out
        if (LowerCase(FormItem.Item(j).Name) = LowerCase(FieldName)) or
           (LowerCase(FormItem.Item(j).Id) = LowerCase(FieldName))
        then begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
      except
        Exit;
      end;
  end;
end;
Dann funktioniert die Operation mit dem OnDocumentComplete-Ereignis wunderbar:
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  FillForm(WebBrowser1, 'Test', 'Test');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://localhost/test.html');
end;
(Folgende HTML-Date wurde benutzt.)
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    <form>
      <input type="text" id="tEsT">
    </form>
  </body>
</html>
MfG,
d3g

Jan 2. Jan 2003 20:21

Hallo d3g,

Zitat:

Zitat von Jan
Hallo Chakotay1308,
leider nein, wenn ich die Anfrage über einen Buttonklick sende, dann funktioniert sie einwandfrei, aber ondownloadcomplete und onnavigatecomplete resultieren in exeptions.
Gruß
Jan

Wie ich da schon geschrieben habe funktioniert das Ausfüllen ganz wunderbar, wahrscheinlich weil ich keine vorgefertigte Prozedur von Swissdelphicenter benutze :]
Ich nehme halt wie vorher schon mal erwähnt an, dass das deswegen so ist, weil das Formular in einem Frame ist, kann das sein?
Gruß
Jan

Jan 3. Jan 2003 16:46

Na los leute, da weiss 100% einer rat!! BIIIIITTEEEEE!! Meim komplettes Programm funktioniert schon, bis auf dieses eine Problem.
Wenn ihr mir wenigstens sagen würdet, wie ich überprüfen kann, ob bestimmte Elemente schon existieren, ohne dass ich einen error bekomme, das würde mir vielleicht auch weiterhelfen.
Also strengt mal eure Hirne an, und helft mir mal bitte weiter! :]
THX!!
Jan

masters001 13. Jan 2003 17:48

Das Problem hatte ich auch ich hab das alles in nen try - except block geschrieben!
Also die Fehlermeldung wird so lange verhindert bis die Seite dann richtig geladen ist!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz