我有一个TWebBrowser对象,它在运行时创建并在后台使用,即不可见。问题是像OnDocumentComplete这样的事件在Delphi2009中不起作用或没有触发。有什么建议吗?
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FWebBrowser:= TWebBrowser.Create(Self);
FWebBrowser.RegisterAsBrowser:= True;
FWebBrowser.OnDocumentComplete:= WhenDocIsCompleted;
end;
procedure TfrmMain.WhenDocIsCompleted(ASender: TObject; const pDisp: IDispatch;
var URL: OleVariant);
begin
ShowMessage('Doc is completed!');
end;
Navigate和Navigate2之间有什么重要区别?我该如何在这里启用cookie?
提前致谢。
答案 0 :(得分:4)
TWinControl(FWebBrowser).Parent := Form1; // Parent property is read-only unless cast
答案 1 :(得分:2)
您可能遇到此问题,因为TWebBrowser内部与父窗体的句柄紧密配合,以获取从Windows发布的消息。尝试使用带有TWebBrowser的隐藏表单(也可以选择创建运行时),和/或调查HandleAllocated和HandleNeeded方法是否可以帮助您。
答案 2 :(得分:2)
调用OnDocumentComplete问题:
WebBrowser1.HandleNeeded;
或在你的情况下:
FWebBrowser.HandleNeeded;
在webBrowser.Navigate 之前
答案 3 :(得分:1)
与网页Cookie完美配合的组件是来自EmbeddedWB的TEmbeddedWB,并且是免费的。
答案 4 :(得分:1)
procedure TForm1.ReCreateBrowser();
begin
if(WebBrowser <> NIL) then
begin
WebBrowser.Stop;
WebBrowser.Destroy;
end;
WebBrowser := TWebBrowser.Create(Form1);
TWinControl(WebBrowser).Name := 'WebBrowser';
TWinControl(WebBrowser).Parent := Form1; //set parent...can be panel, tabs etc
WebBrowser.Silent := true; //don't show JS errors
WebBrowser.Visible:= true; //visible...by default true
//don't set width/heigh/top/left before TWinControl(WebBrowser).Parent := Form1;
WebBrowser.Top := 10;
WebBrowser.Left := 10;
WebBrowser.Height := 600;
WebBrowser.Width := 800;
WebBrowser.OnDocumentComplete := WebBrowserDocumentComplete;
//WebBrowser.OnNavigateComplete2 := WebBrowserNavigateComplete2;
end;