Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TWebBrowser.ReadyState = READYSTATE_COMPLETE (https://www.delphipraxis.net/147559-twebbrowser-readystate-%3D-readystate_complete.html)

dominikkv 11. Feb 2010 12:03


TWebBrowser.ReadyState = READYSTATE_COMPLETE
 
Hallo,

ich habe einen Quelltext einer Seite und möchte, um einen Screenshot zu machen, diesen in einen TWebBrowser laden. Das geschieht so:
Delphi-Quellcode:
procedure WaitForBrowser(WB: TWebbrowser);
begin
  while (WB.ReadyState <> READYSTATE_COMPLETE)
    and not (Application.Terminated) do
  begin
    Application.ProcessMessages;
    Sleep(0);
  end;
end;

// WB: TWebBrowser;
if WB.Document = nil then
  WB.Navigate('about:blank');
OleVariant(WB.Document as IHTMLDocument2).Clear;
OleVariant(WB.Document as IHTMLDocument2).Write(Utf8ToAnsi(Quelltext));
OleVariant(WB.Document as IHTMLDocument2).Close;

if WB.ReadyState = READYSTATE_COMPLETE then // Testweise eingebaut
  showmessage('Noch nicht richtig geladen!');//

WaitForBrowser(WB);

DoScreenshot();
Das klappt bei der ersten Seite auch wunderbar: Bilder etc werden nachgeladen und danach der Screenshot gemacht. Aber bei allen nachfolgenden Seiten, die ich auf diese Art und Weise lade, hat WB.ReadyState gleich nach dem Quelltext laden den Status READYSTATE_COMPLETE, das heißt die zu Testzwecken eingebaute Meldung kommt und auf dem Screenshot sieht man die Seite ohne Bilder :pale:

Ich vermute, dass WB.ReadyState nicht zurückgesetzt wird, wenn man einen Quelltext wie oben lädt. Stimmt das, und wie kann ich das umgehen?


mfg.Dominik

(WB.OnDocumentComplete wird nicht gefeuert und über eine lokale Datei und dann WB.Navigate(Datei) will ich nicht gehen)

p80286 11. Feb 2010 12:24

Re: TWebBrowser.ReadyState = READYSTATE_COMPLETE
 
Hallo Dominik,

teste einmal wb.Busy auf true. Ich hab bisher noch nicht heraus bekommen, wann dieses READYSTATE_COMPLETE wirklich stimmt.

Gruß
K-H

dominikkv 11. Feb 2010 12:47

Re: TWebBrowser.ReadyState = READYSTATE_COMPLETE
 
Zitat:

Zitat von p80286
Hallo Dominik,

teste einmal wb.Busy auf true. Ich hab bisher noch nicht heraus bekommen, wann dieses READYSTATE_COMPLETE wirklich stimmt.

Gruß
K-H

Sehr schön, jetzt funktionierts :love:

Delphi-Quellcode:
procedure WaitForBrowser(WB: TWebbrowser);
begin
  while (WB.Busy)
    and not (Application.Terminated) do
  begin
    Application.ProcessMessages;
    Sleep(100);
  end;
end;
Vielen Dank p80286, auf die DP ist immer Verlass :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.

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