2009-12-27 3 views
4

У меня есть объект TWebBrowser, который создается во время выполнения и используется в фоновом режиме, то есть не отображается. Проблема в том, что такие события, как OnDocumentComplete, не работают или не запускаются в Delphi2009. Любой совет?Создание TWebBrowser в Runtime с Delphi

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

Не совсем ответ на ваш вопрос, но почему вы используете TWebBrowser, если вы не используете i t для отображения? Не лучше было бы получить его с помощью компонента HTTP Client, такого как TIdHTTP от Indy или API WinInet, который использует те же настройки, что и IE. См. Http://stackoverflow.com/questions/1823542/how-to-send-a-http-post-request-in-delphi-using-wininet-api –

+1

Я использовал TidHTTP и TidCokkieManager, но проблемы с cookies сохраняются, поэтому Я видел TWebBrowser как решение, но после тестов у него такая же проблема. –

+0

Так в чем вопрос? Это о куки или событие? Может быть, лучше всего отделить оба вопроса. –

ответ

1

Компонент, прекрасно работающий с веб-страницами cookie, является TEmbeddedWB от EmbeddedWB и является бесплатным.

+0

Я не могу получить доступ к веб-сайту EmbeddedWB в течение длительного времени. У меня есть источники и Im, использующие в Delphi 2010, также я улучшил некоторые части и исправил некоторые ошибки. –

2

Возможно, эта проблема возникла из-за того, что TWebBrowser внутренне тесно взаимодействует с дескриптором родительской формы, чтобы получать сообщения, отправленные из окон. Попробуйте использовать скрытую форму с помощью 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

Смежные вопросы