Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2015
Jontart Jontart is offline
Miembro
 
Registrado: jun 2006
Posts: 13
Poder: 0
Jontart Va por buen camino
Perdón por la tardanza, en contestar.

Eso es lo que, en principio, suponía que pasaba, que la página no estaba totalmente cargada. Pero, por ejemplo, no funciona si hago un sleep() de 10 segundos, o un ciclo For muy largo. Sólo funciona si, de alguna manera, salgo del procedimiento que está corriendo, aunque sea por un breve periodo de tiempo (1 segundo, p.e.). Por eso SI que funciona si lo ejecuto desde otro botón, si hago correr un nuevo form durante un tiempo determinado, o si ejecuto un ShowMessage, que es modal.

El programa, ahora, se ejecuta bien; lo que quería saber es porqué. Qué órdenes debo usar para parar totalmente un procedimiento, en el entorno web, hasta obtener la respuesta deseada y que funcione elegantemente.
Código:
while webBrowser2.ReadyState < READYSTATE_INTERACTIVE do 
   Application.ProcessMessages;
¡Ésta no funciona adecuadamente!

Gracias.
Responder Con Cita
  #2  
Antiguo 14-03-2015
Jovalca Jovalca is offline
Miembro
NULL
 
Registrado: sep 2013
Ubicación: Madrid - España
Posts: 30
Poder: 0
Jovalca Va por buen camino
Hola otra vez Jontart.

Hace tiempo que migré a Lazarus y a Mac pero creo recordar que TWebBrowser dispone de un evento OnNavigateComplete o TWebBrowser.OnNavigateComplete2 que puede servirte para lo que necesitas. Inserta las acciones despues del login en ese evento a ver si se soluciona.

Saludos.
Responder Con Cita
  #3  
Antiguo 14-03-2015
Jontart Jontart is offline
Miembro
 
Registrado: jun 2006
Posts: 13
Poder: 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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Prueba roman La Taberna 0 27-09-2012 20:32:21
Prueba del ratón ArdiIIa Humor 9 05-06-2008 20:13:10
Prueba Archer Humor 5 28-09-2005 22:46:42


La franja horaria es GMT +2. Ahora son las 08:10:37.


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