Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: twebbrowser will einfach nicht warten

  Alt 29. Jun 2007, 13:41
Herzlich willkommen in der Delphi-PRAXiS, pillepalle.

Die Prozedur ist auf den ersten Blick nicht schlecht, aber hat auf den zweiten Blick einen Mangel: Wird sie direkt nach dem WebBrowser.Navigate() aufgerufen und wurde der WebBrowser bereits einmal initialisiert, dann dürfte ReadyState beim Eintritt in die Prozedur immernoch auf 'Complete' stehen.

Besser als dieses Busy-Waiting ist das Arbeiten mit den vorgesehenen Ereignissen OnBeforeNavigate2() und OnDocumentComplete(). Auch dazu findest du in der DP reichlich Quellcode-Beispiele.

Delphi-Quellcode:
type
  TWebForm = class(TForm)
  // ...
  private
    DocumentWait: IDispatch;
    procedure ProcessDocument(document: IHTMLDocument2);
  end;

// ...
 
procedure TWebForm.WebBrowserBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  DocumentWait := pDisp;
end;

procedure TWebForm.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if DocumentWait = pDisp then
    with pDisp as IWebBrowser2 do
      ProcessDocument(Document as IHTMLDocument2);
end;

procedure TWebForm.ProcessDocument(document: IHTMLDocument2);
begin
  ShowMessage(document.title);
end;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat