2009-12-27 153 views
4

我有一個TWebBrowser對象,它在運行時創建並在後臺使用,即不可見。問題是像OnDocumentComplete這樣的事件不工作或在Delphi2009中沒有觸發。有什麼建議?使用Delphi在運行時創建TWebBrowser

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?

在此先感謝。

+1

之前不是一個真正的回答你的問題,但是如果你不使用i,你爲什麼要使用TWebBrowser呢? t用於顯示?使用諸如Indy的TIdHTTP之類的HTTP客戶端組件或使用與IE相同的設置的WinInet API來獲取它並不會更好。請參閱http://stackoverflow.com/questions/1823542/how-to-send-a-http-post-request-in-delphi-using-wininet-api –

+1

我已經使用了TidHTTP和TidCokkieManager,但仍然存在Cookie問題我看到TWebBrowser就像一個解決方案,但在測試之後它有同樣的問題。 –

+0

那麼問題是什麼?是關於cookie還是事件?如果你把這兩個問題分開,最好也許。 –

回答

1

與網頁cookie完美配合的組件是從EmbeddedWB免費提供的TEmbeddedWB。

+0

我無法長時間訪問EmbeddedWB網站。我有源代碼,並在德爾福2010使用,我也改進了一些零件,並修復了一些錯誤。 –

2

您可能會遇到此問題,因爲TWebBrowser內部與父窗體的句柄緊密結合在一起,以便從Windows發佈消息。嘗試使用帶有TWebBrowser的隱藏窗體(也可以創建運行時),和/或調查HandleAllocated和HandleNeeded方法是否可以幫助您。

3
TWinControl(FWebBrowser).Parent := Form1; // Parent property is read-only unless cast 
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; 
2

徵集的OnDocumentComplete問題:

WebBrowser1.HandleNeeded; 

或在您的情況:

FWebBrowser.HandleNeeded; 

webBrowser.Navigate