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