폼에서 아래처럼 쓰레드를 생성하고 값을 세팅하고 쓰레드를 깨웠습니다.
procedure TForm1.ThreadCreate(Sender: TObject; setUrl: String );
var
thread: captureBrowser;
begin
thread:= captureBrowser.Create(true);
// thread.FreeOnTerminate:= false;
thread.setUrl(setUrl);
thread.Resume;
end;
그리고 아래는 쓰레드의 동작 부분입니다.
제가 원하는 동작은 웹브라우저에 GO(url)을 해줬으니 그 URL이 열리면 EmbeddedWB1DocumentComplete 프로시저가 호출되고 그 동작이 끝나면 이 쓰레드가 죽기를 바랍니다. 그런데 제가 아직 델파이의 쓰레드에 대해 이해가 부족한 탓인지 브라우저가 폼에 잠깐 나왔다가 바로 사라져 버립니다 -.-;
이 쓰레드는 종료되고요.
브라우저가 할일을 다 한 후에 쓰레드가 종료되게 하는 방법이 없을까요?
type
captureBrowser = class(TThread)
private
EmbeddedWB1: TEmbeddedWB;
protected
procedure EmbeddedWB1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
public
implementation
uses unit1;
procedure captureBrowser.Execute;
begin
CoInitialize(nil);
EmbeddedWB1:= TEmbeddedWB.Create(nil);
TControl(EmbeddedWB1).Parent := Form1.panel1; //or whatever...
EmbeddedWB1.Align :=alClient;
EmbeddedWB1.Loaded;
EmbeddedWB1.Visible := True;
EmbeddedWB1.Top:= 100;
EmbeddedWB1.width:= 1024;
EmbeddedWB1.height:= 1024;
EmbeddedWB1.Go(captureUrl);
EmbeddedWB1.OnDocumentComplete:= EmbeddedWB1DocumentComplete;
{ Place thread code here }
end;
[...]
결론만 말씀 드리면 TEvent 를 사용 해야 합니다.
Execute 의 끝행에서 Event.WaitFot(..) 를 불러
Waiting 합니다.
글고 EmbeddedWB1DocumentComplete() 에서
작업이 완료 되면 끝행에서 Event.SetEvent() 를 호출 합니다.
TEvent의 사용법은 Delphi Help 를 보세요.