Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-01-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Evitar que se congele mi aplicación!!

Hola Forista necesitaria si me pueden ayudar para solucionar el siguiente problema:
Estoy utilizando API para conectarme a una pagina (wininet) la duda es la siguiente cuando ago una llamada como ser InternetOpenUrl esta me paraliza la aplicacion hasta que llegue la respuesta hay alguna forma de refrescar mi aplicacion durante este proceso ya probee con application.ProcessMessages pero no funciona ya que lo coloco en la siguiente linea que hago la peticion.

Desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 20-01-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
La verdad es que no he trabajado con esta API aún, pero, según encontré por ahí, el truco está en hacer la llamada a "InternetOpen" (la primera función que ha de invocarse y que inicializa el API WinInet) pasándole como parámetro (o "flags"): INTERNET_FLAG_ASYNC. De esta manera, todas las llamadas a las demás funciones, como "InternetOpenUrl", se ejecutarán de forma asíncrona, es decir, devolverá el control a la aplicación antes de que se termine su ejecución.

Saludos!
Responder Con Cita
  #3  
Antiguo 20-01-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Tenes razon pero pierdo el control mi codigo es :
Código Delphi [-]
    hInet := InternetOpen(PChar(application.title),INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,nil,nil,INTERNE  T_FLAG_ASYNC);
    hConnect := InternetOpenUrl(hInet,PChar(HTTPserver),nil,0,0,0);


    if not Assigned(hConnect) then....//hConnet = nil

Todo esto porque necesito saber el contenido de la cabecera de una conexion TCP con protocolo HTTP para saber la IP y identificar si esta conectado a un proxy anonimo o no.
Responder Con Cita
  #4  
Antiguo 20-01-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Como ya te comenté no estoy muy familiarizado con esta API, pero, según leí en el MSDN de Microsoft, cuando se hacen llamadas asíncronas hay que crear una función "callback" de estado que sirve, precisamente, para monitorear el estado de una "petición" de Internet (y es, en esta función, donde creo que tendría que ir tu código de verificación).

Visita la siguiente dirección que te muestra como ha de crearse y usarse tal función:
http://windowssdk.msdn.microsoft.com..._functions.asp

Espero que te sirva!

Saludos!

Última edición por jmariano fecha: 20-01-2006 a las 23:50:13.
Responder Con Cita
  #5  
Antiguo 21-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
De lo mejor que he visto en español para usar WinInet:

http://www.lawebdejm.com/prog/delphi/index.html

// Saludos
Responder Con Cita
  #6  
Antiguo 23-01-2006
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Thumbs up

Gracias a todos con la info que me dieron me funciono, era como me habian dicho ustedes:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
hSession, hURL: HInternet;
lpBuffer: array[0..1024+1] of Char; 
dwBytesRead: DWORD;
begin
hSession := InternetOpen(PChar(ExtractFileName(Application.ExeName)),INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
if Assigned( hSession ) then 
  begin
  hURL := InternetOpenUrl( hSession, PChar('http://www.xxxxxxxx.com.ar/ip.php'), nil, 0, 0, INTERNET_FLAG_ASYNC);
  if Assigned( hURL ) then
     while true do
          begin
          dwBytesRead := 1024;
          InternetReadFile( hURL, @lpBuffer, 1024, dwBytesRead );
          if dwBytesRead = 0 then break;
          lpBuffer[dwBytesRead] := #0;
          Memo1.Lines.Add( lpBuffer );
          end; //while
InternetCloseHandle( hURL );
end;
InternetCloseHandle( hSession );
end;
Responder Con Cita
Respuesta



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
Evitar solamente Alt+f4 en mi aplicacion Gelmin Varios 8 13-09-2013 18:43:07
evitar ejecutar la misma aplicacion 2 veces noe API de Windows 13 26-05-2008 19:30:03
Evitar Instancias Multiples De Mi Aplicacion edgusano .NET 8 28-04-2005 19:21:02
Evitar cambiar a otra aplicación Jan_polero API de Windows 1 24-01-2005 17:27:55
Evitar Poppups en mi aplicación. DarkByte Varios 0 25-12-2003 19:30:37


La franja horaria es GMT +2. Ahora son las 09:14:05.


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
Copyright 1996-2007 Club Delphi