繁体   English   中英

使用Delphi在运行时创建TWebBrowser

[英]Creating TWebBrowser in Runtime with Delphi

我有一个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?

提前致谢。

TWinControl(FWebBrowser).Parent := Form1;  // Parent property is read-only unless cast

您可能遇到此问题,因为TWebBrowser内部与父窗体的句柄紧密配合以获取从Windows发布的消息。 尝试使用带有TWebBrowser的隐藏表单(也可选择创建运行时),和/或调查HandleAllocated和HandleNeeded方法是否可以帮助您。

调用OnDocumentComplete问题:

WebBrowser1.HandleNeeded;

或者在你的情况下:

FWebBrowser.HandleNeeded;

在webBrowser.Navigate之前

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;

与网页cookie完美配合的组件是EmbeddedWB的 TEmbeddedWB,是免费的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM