Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   2 WebBrowser y 1 delay ayuda please (https://www.clubdelphi.com/foros/showthread.php?t=68700)

miguel_fr 01-07-2010 08:03:20

2 WebBrowser y 1 delay ayuda please
 
resulta que tengo 2 webbrowser para poder recorrer una pagina.
con el WebBrowser1 cargo mi pagina inicial que dispone de varios link, los que voy recorriendo de a 1 en el otro WebBrowser2.
utilizo el evento
TForm1.WebBrowser1DocumentComplete
desde donde realizo un bucle buscando los link enviandolo al otro webbroser

TForm1.WebBrowser2DocumentComplete
dentro de este, saco la informacion que me interesa.

el problema esta en que el primer evento donde se encuentra mi bucle no espera a la terminacion del evento TForm1.WebBrowser2DocumentComplete

miguel_fr 01-07-2010 15:54:22

lo que yo quiero hacer es que despues de mandar este codigo (linea 2)
Begin
1)..........
2)form1.WebBrowser2.Navigate('http://www.mandacojones.com');
3)..........
4)..........
end;

Antes de seguir con la linea 3) de codigo, que se termine de ejecutar mi proceso de carga completa en el webbrowser2

procedure TForm1.WebBrowser2DocumentComplete
Begin
...
...
end;

intente usando form1.WebBrowser2.ReadyState, donde el valor 4 seria que ya esta listo CREO, pero nose bien como hacer la pausa porque si lo pongo en un bucle el programa se traba muchisimo. ya se me estan acabando las ideas de como hacer la pausa please!!!

Al González 01-07-2010 19:29:28

He notado que el problema planteado es muy recurrente. Es como si las propiedades Busy y ReadyState de TWebBrowser, por sí solas, no fueran del todo fiables.

Hace tiempo implementé esta solución. Ojalá a ti también te resulte útil.

Código Delphi [-]
Unit WaitWebBrowser;

Interface

  Uses
    ShDocVw, ActiveX;

  Type
    TWaitWebBrowser = Class (TWebBrowser)
      Protected
        { Fields }
        WaitingForDocumentComplete :Boolean;

        { Static methods }
        Function GetIdle :Boolean;

        { Overridden methods }
        Procedure InvokeEvent (DispID :TDispID; Var Params :TDispParams);
          Override;
      Public
        { Static methods }
        Procedure NavigateWait (Const URL :String);
        Procedure WaitForIdle;

        { Properties }
        Property Idle :Boolean Read GetIdle;
    End;

Implementation

  Uses
    Forms;

  { TWaitWebBrowser }

  { Protected static methods }

  Function TWaitWebBrowser.GetIdle :Boolean;
  Begin
    Result := Not WaitingForDocumentComplete And Not Busy And
      (ReadyState = ReadyState_Complete);
  End;

  { Protected overridden methods }

  Procedure TWaitWebBrowser.InvokeEvent (DispID :TDispID;
    Var Params :TDispParams);
  Begin
    If DispID = 250 Then  // OnBeforeNavigate2
      WaitingForDocumentComplete := True
    Else
      If (DispID = 259 { OnDocumentComplete }) And
      (ReadyState = ReadyState_Complete) Then
        WaitingForDocumentComplete := False;

    Try
      Inherited InvokeEvent (DispID, Params);
    Except
      WaitingForDocumentComplete := False;
      Raise;
    End;
  End;

  { Public static methods }

  Procedure TWaitWebBrowser.NavigateWait (Const URL :String);
  Begin
    Navigate (URL);
    WaitForIdle;
  End;

  Procedure TWaitWebBrowser.WaitForIdle;
  Begin
    Repeat
      Forms.Application.ProcessMessages;
    Until Idle;
  End;

End.

Código Delphi [-]
WaitWebBrowser1.NavigateWait ('http://www.clubdelphi.com/');

Un saludo.

Al González.
P.D. Miguel, te recomienzo esforzarte en el empleo adecuado de acentos. Con ello te darás a entender mejor en tus siguientes intervenciones.

Casimiro Notevi 01-07-2010 19:42:39

[ interrupción en el tema ]

¡¡¡ Al !!! me emociona verte de nuevo !!! :)

[ / interrupción en el tema ]

miguel_fr 03-07-2010 05:00:36

muchas gracias lo voy a poner en practica


La franja horaria es GMT +2. Ahora son las 14:31:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi