2009-12-19 59 views
0

我是新來的delphi和TEmbeddedWB(替代TWebBrowser嵌入Internet Explorer在Delphi中),我真的不明白我的源有問題。delphi TEmbeddedWB組件導航完成

很簡單,但不能正常工作,

我的問題是在我的Delphi源EmbeddedWB1.ReadyState <> READYSTATE_INTERACTIVE無法正常工作

。有登錄表單在這個站點中

http://sports.khan.co.kr/htdocs/login/login.html

,如果瀏覽這個頁面時,它不能正確地與

工作EmbeddedWB1.ReadyState <> READYSTATE_INTERACTIVE因爲網頁瀏覽速度太快,

因此Embeddedbwb1無法檢測到登錄表單元素併發生錯誤。

任何人都可以幫助我嗎?什麼是問題?在此先感謝

 begin 
     //WB := EmbeddedWB; 
     forms := EmbeddedWB1.doc2.Forms as IHTMLElementCollection; 
     theForm := forms.Item(0,'') as IHTMLFormElement; 

     EmbeddedWB1.Navigate('http://sports.khan.co.kr/htdocs/login/login.html'); 
     while EmbeddedWB1.ReadyState <> READYSTATE_INTERACTIVE do 
     begin 
     Application.ProcessMessages; 
      Sleep(500); 
     end; 
      with EmbeddedWB1 do 
      begin 
      EmbeddedWB1.OleObject.Document.GetElementByID('uid').Value := 'loginid'; 
      EmbeddedWB1.OleObject.Document.GetElementByID('upw').Value := 'password'; 
      EmbeddedWB1.OleObject.Document.forms.item(1).submit(); 

      end; 
     end; 

回答

1

,而不是循環使用application.processmessages,爲什麼不使用OnNavigateComplete事件,然後,如果你的正確狀態火登錄該事件內。爲此,請在導航到登錄之前創建一個新的枚舉類型NavigationState = (nsUnknown,nsLoginRequested),並將導航狀態的實例變量設置爲nsLoginRequested。在OnNavigateComplete中,如果狀態變量爲nsLoginRequested,則處理登錄並將狀態變量重置爲nsUnknown(或狀態中的下一步)。

這是一個簡單的狀態引擎模式,並完全消除了循環。