例如说TWebBrowser,如果窗体没SHOW过的,调用NAVIGATE是没效果的。是否有办法可以手动进行下“激活”,让窗体不显示,WebBrowser也能正常使用呢?

解决方案 »

  1.   

    新的一天,新的一定(其实以前CSDN的手动提前功能挺好的,干嘛取消)
      

  2.   

    navigate跟form沒有必然聯系,把它放在非ui線程也可以執行,但要顯示的話,就要有form了。
    "如果窗体没SHOW过的,调用NAVIGATE是没效果的" ?怎么測試的?你是不是要等待navigatecomplete or downloadcomplete後,再顯示form?
      

  3.   

    过程是这样的:1、首先新建一个PROJECT,添加一个TFORM2
    2、TFORM2放一个WEBBROWSER(简称WB),并在TFORM2增加一个方法BROWSE,调用WB的NAVIGATE随便浏览个网页(例如GOOGLE)
    3、WB增加事件DOCUMENTCOMPLETE,里面SHOWMESSAGE
    4、TFORM1动态创建一个FORM2,不SHOW,直接调用FORM2.BROWSE,可以看到没有SHOWMESSAGE
    5、只要我一SHOW这个FORM2(无需再次调用BROWSE),SHOWMESSAGE就显示出来了
    6、把FORM2重新HIDE掉,调用FORM2.BROWSE,以后就一直都能正常SHOWMESSAGE了因此我怀疑是不是OLE控件需要“激活”
      

  4.   

    我想要做到的是,第一次不SHOW FORM2,也能让ONDOCUMENT中的SHOWMESSAGE显示出来
      

  5.   

    downloadcomplete以及 OnNavigateComplete2是會被觸發  原因應該是ReadyState并未被處理為  ReadyState_Complete,所以ondocumentcomplete不會被觸發至于ReadyState怎么處理,可能要再查一下,才能搞清問題
      

  6.   

    第一次的时候,我即使等上几分钟,事件也没触发;但是SHOW过再HIDE的时候,一调用事件就马上触发了。我起初也认为没什么关系,但是一试确实存在这个现象。
      

  7.   

    暫時解法可以 while WebBrowser.ReadyState <> READYSTATE_COMPLETE  do
                  Application.processMessages
    判斷是否完成。若有其他依賴OnDocumentComplete事件的做法,就比較麻煩了....不知道是否跟 document viewer是否有關...若form沒有被顯示出來,viewer是否就不創建?所以webbrowser就不是interactive,即使加載完數據,也還不能置為READYSTATE_COMPLETE  。瞎猜...沒證據  ^_^
      

  8.   

    把TWebBrowser的代码调试一下试试
      

  9.   

    TWebBrowser是OLE控件,你有实际的源代码?