AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Warten bis der TWebBrowser fertig geladen hat?
Thema durchsuchen
Ansicht
Themen-Optionen

Warten bis der TWebBrowser fertig geladen hat?

Ein Thema von toms · begonnen am 28. Dez 2008 · letzter Beitrag vom 30. Dez 2008
 
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#1

Warten bis der TWebBrowser fertig geladen hat?

  Alt 28. Dez 2008, 20:36
Hallo

Wie kann man zuverlässig feststellen, ob ein TWebBrowser fertig geladen hat?

1. Wenn Wait() von der Code-Library verwendet wird,
kann die Applikation unter Umständen nicht mehr beendet werden, da der Browser den ReadyState = READYSTATE_COMPLETE nicht in jedem Fall erreicht.

Test:

Delphi-Quellcode:
Webbrowser1.Navigate('http://www.microsoft.com/surface/');
Wait(Webbrowser1);
ShowMessage('mich wirst du nie sehen!');
Dabei werden folgende Ereignisse nacheinander ausgelöst:

20:26:28 : OnBeforeNavigate2 (1)
20:26:28 : OnDownloadBegin (1)
20:26:28 : OnDownloadComplete (1)
20:26:28 : OnDownloadBegin (2)
20:26:29 : OnNavigateComplete2 (1)
20:26:29 : OnBeforeNavigate2 (2)
20:26:29 : OnNavigateComplete2 (2)
20:26:29 : OnDownloadComplete (2)
20:26:29 : OnDocumentComplete (Frame wtPage geladen )
20:26:30 : OnDocumentComplete (komplettes Dokument geladen)
20:26:30 : OnBeforeNavigate2 (3)
20:26:30 : OnDownloadBegin (3)
20:26:30 : OnDownloadComplete (3)
20:26:30 : OnDownloadBegin (4)
20:26:30 : OnDownloadComplete (4)

Auch der andere Ansatz von der Codlib von mir (Vergleich CurWebrowser = TopWebBrowser) bringt nicht
das gewünschte Ergebnis, da nach "OnDocumentComplete (komplettes Dokument geladen)" nochmals OnBeforeNavigate2 etc aufgerufen werden.

Dann gibt es noch die Möglichkeit, die obige Wait Procedure mit einem TimeOut zu erweitern, was
nicht mehr dazu führt, dass die Anwendung nicht mehr beendet werden kann.

Delphi-Quellcode:
function WaitForBrowser(WB: TWebbrowser; TimeOut: Integer = 8000): Boolean;
var
  StartTime, EndTime: DWORD;
begin
  Result := False;
  StartTime := GetTickCount;
  repeat
    Application.ProcessMessages;
    EndTime := GetTickCount;
  until (WB.ReadyState = READYSTATE_COMPLETE) or (Application.Terminated) or (EndTime - StartTime > TimeOut);
  Result := WB.ReadyState = READYSTATE_COMPLETE;
end;
Vielleicht hat ja jemand noch weitere Vorschläge?
Thomas
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz