2009-12-19 7 views
0

Je suis nouveau à delphi et TEmbeddedWB (alternative à TWebBrowser qui embarque Internet Explorer dans Delphi), je ne comprends vraiment pas où ma source a un problème.delphi TEmbeddedWB achèvement de la navigation composant

très simple mais ne peut pas fonctionner correctement,

mon problème est ma source delphi EmbeddedWB1.ReadyState <> READYSTATE_INTERACTIVE fonctionne pas

correctement. il y a formulaire de connexion existe

dans ce site (http://sports.khan.co.kr/htdocs/login/login.html)

et si cette page navigate, il ne fonctionne pas correctement avec

EmbeddedWB1.ReadyState <> READYSTATE_INTERACTIVE parce que page Web naviguer trop vite,

L'élément de formulaire de connexion n'a donc pas pu être détecté par Embeddedbwb1 et une erreur s'est produite.

quelqu'un peut m'aider? quel est le problème? merci à l'avance

 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; 

Répondre

1

Plutôt que d'utiliser Application.ProcessMessages dans une boucle, pourquoi ne pas utiliser l'événement OnNavigateComplete puis le feu de votre connexion à l'intérieur de cet événement si votre dans l'état correct. Pour configurer ceci, créez un nouveau type énuméré NavigationState = (nsUnknown,nsLoginRequested) puis juste avant votre navigation vers la connexion, définissez une variable d'instance de navigationstate à nsLoginRequested. Dans votre OnNavigateComplete, si la variable d'état est nsLoginRequested, traitez le login et réinitialisez la variable d'état à nsUnknown (ou l'étape suivante dans votre état).

Ceci est un modèle de moteur d'état simple, et élimine complètement la boucle.