Ver Mensaje Individual
  #9  
Antiguo 14-03-2015
Jontart Jontart is offline
Miembro
 
Registrado: jun 2006
Posts: 13
Reputación: 0
Jontart Va por buen camino
Si que FUNCIONA.

Utilizando los eventos OnBeforeNavigate(), OnDocumentComplete() y OnNavigateComplete2() se consigue lo que quería sin artificios extraños.

Defino dos variables y creo los eventos:
Código Delphi [-]
var
  Form1: Tform1;
  CurDispatch: IDispatch;
  FDocLoaded: Boolean;

implementation

{$R *.dfm}

procedure TACDM.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
    CurDispatch := nil;
    FDocLoaded := False;
end;

procedure TACDM.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
   if CurDispatch = nil then
        CurDispatch := pDisp;
end;

procedure TACDM.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
   if (pDisp = CurDispatch) then  
      begin
        FDocLoaded := True;
        CurDispatch := nil;
      end;
end;
Ahora, en el programa, después de cada acción que requiera una respuesta del servidor pongo:
Código Delphi [-]
   repeat Application.ProcessMessages until FDocLoaded;
y eso es todo.

Gracias por vuestra inestimable ayuda.
Responder Con Cita