简体   繁体   English

使用Delphi在运行时创建TWebBrowser

[英]Creating TWebBrowser in Runtime with Delphi

I have a TWebBrowser object which is created in runtime and used in background, that is, not visible. 我有一个TWebBrowser对象,它在运行时创建并在后台使用,即不可见。 The problem is that events like OnDocumentComplete dont work or are not triggered in Delphi2009. 问题是像OnDocumentComplete这样的事件在Delphi2009中不起作用或没有触发。 Any advice? 有什么建议?

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;

There is any difference important between Navigate and Navigate2? Navigate和Navigate2之间有什么区别吗? How can I enable cookies here? 我如何在这里启用cookie?

Thanks in advance. 提前致谢。

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

You may have this issue because the TWebBrowser internally works closely together with the handle of the parent form to get messages posted from windows. 您可能遇到此问题,因为TWebBrowser内部与父窗体的句柄紧密配合以获取从Windows发布的消息。 Try using a hidden form with the TWebBrowser on (optionally run-time created as well), and/or investigate if the HandleAllocated and HandleNeeded methods could help you. 尝试使用带有TWebBrowser的隐藏表单(也可选择创建运行时),和/或调查HandleAllocated和HandleNeeded方法是否可以帮助您。

Call for the OnDocumentComplete Problem: 调用OnDocumentComplete问题:

WebBrowser1.HandleNeeded;

or in your case: 或者在你的情况下:

FWebBrowser.HandleNeeded;

before webBrowser.Navigate 在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