unit Unit2;
interface
uses
SysUtils, Classes, Controls, Forms, Dialogs, OleCtrls, SHDocVw,
ActiveX;
type
myThread = class(TThread)
private
{ Private-Deklarationen }
protected
procedure Execute; override;
procedure Submit(Sender: TObject; const pDisp: IDispatch; var
URL: OleVariant);
procedure UpdateCaption;
public
app : TApplication;
end;
implementation
uses Unit1;
{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
nur in einer Methode namens Synchronize aufgerufen werden, z.B.
Synchronize(UpdateCaption);
und UpdateCaption könnte folgendermaßen aussehen:
procedure myThread.UpdateCaption;
begin
Form1.Caption := 'Aktualisiert in einem Thread';
end; }
{ myThread }
procedure myThread.Execute;
var wb : TWebBrowser;
begin
OleInitialize(nil);
wb := TWebBrowser.Create(Form1);
try
TWinControl(wb).Name := 'MyWebBrowser';
TWinControl(wb).Parent := Form1;
wb.OnDocumentComplete := self.Submit;
wb.Align := alClient;
wb.Navigate('http://www.google.com');
while wb.ReadyState <> READYSTATE_COMPLETE do
app.ProcessMessages;
Synchronize(UpdateCaption);
except
FreeAndNil(wb);
OleUninitialize;
end;
end;
procedure myThread.UpdateCaption;
begin
Form1.Caption := 'Aktualisiert in einem Thread';
end;
procedure myThread.Submit(Sender: TObject;
const pDisp: IDispatch; var
URL: OleVariant);
begin
showmessage('test');
end;
end.