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 23-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Si la aplicación se "congela" vas a tener que usar anticongelante Y no estoy bromeando, entre los componentes Indy encontraras uno que se llama TIdAntiFreeze, colocalo sobre tu formulario y la aplicación ya no se congelara, y el código de dec debería de funcionar.
Responder Con Cita
  #2  
Antiguo 23-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
haha, en un principio pensé que estaba bromeando Seoane pero luego me di cuenta que no xD
Ahora con el código de Dec si que devería funcionar, pero no lo hace :S

Acabo de probar el antifreeze y dio buenos resultados por que ya no se queda así como congelado el form, pero igual me gustaría mucho que se pueda ver que tiempo tardará, y que el usuario vea el lindo ProgressBar avanzar leeeentamente miestras va por un vaso de agua

Como podrán ver tengo bién mi código, pero no he logrado hacerlo funcionar, alguna idea ?

PD Seone por cierto he visitado tu blog o web xD y esta interesante, aunque me haya gustado comentar, pero no podía, saludos y suerte
Responder Con Cita
  #3  
Antiguo 23-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Pues no sé. Si te fijas en el ejemplo que puse más arriba, mientras está descargándose el archivo todo "fluye" más o menos como se espera. Las barras de progreso se mueven como se espera y la interfaz de la aplicación no se congela. Sin embargo, haciendo unas pruebas, he hecho que el archivo que descargamos se guarde en disco y verás.

Mientras descargamos el archivo todo sigue yendo bien. Sin embargo, cuando se ha terminado de descargar el archivo y este va a ser escrito... (¿cerrado? ¿comprobado?) en el disco... son pocos segundos, uno o dos, pero, la aplicación se congela, efectivamente. ¿Y para qué demonios digo todo esto?

Pues porque me parece que acaso el mismo "HTTP POST" congele la interfaz de la aplicación, es decir, al fin y al cabo no estamos tratando con muchos bytes, supongo, es decir, que no ocurre como con el ejemplo que puse más arriba, que mientras se están descargando bytes va bien, pero, justo al terminar... la aplicación se congela.

No he probado el componente "IdAntiFreeze" (aunque lo conocía) y quizás esto solucionara el tema, empero, para mí que es algo que va un poco más allá, y que en el caso de un "HTTP POST" y acaso también dependiendo del tiempo de respuesta del Servidor que sea, la aplicación va a terminar congelándose más o menos...

Claro que nada de esto es una solución... pero, chico, ahora mismo no se me ocurre otra cosa que levantar este Hilo arriba del todo a ver si otro compañero se atreve con otra respuesta más oportuna que esta.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 23-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Hola:
Dec si, ya he visto y probado tu aplicación y todo anda perfecto, no necesita un anticongelante ni nada, todo lo muestra en el progresBar o el gauge, que se mueven a la par con la descarga, pero en mi caso no, no se por que, pero no quiere mostrar nada, el HTTP POST que tengo, lo tengo dentro de un bucle, pero como dije antetiormente, no creo que afecte en nada el código, pues el que hace el trabajo ahi es el idHTTP, Dec no se si será el problema mio o que sera, pero si tienes tiempo o alguien mas quisiera probarlo aquí les dejo un código con el cual rellenar un formulario por http POST

el formulario es este, es algo simple, pero que pienso que servirá a mas de uno.
http://tekkenbolivia.net/archivos/ph...ar_noticia.php

Ahora puden ver el código fuente y sacar los nombres de las variables que tenemos en nuestro envia_noticias.php como habrán podido ver.

Y aquí les dejo el código en delphi que se encarga de llenar los datos

Código Delphi [-]
procedure TFrmPrincipal.BEnviarClick(Sender: TObject);
var
  http: TIdHttp;
  params: TStrings;
  respuesta: string;
begin
  http := TIdHTTP.Create(Self);
  params := TStringList.Create;
  try
    params.Add('titulo='+ETitulo.Text);
    params.Add('autor='+EAutor.Text);
    params.Add('noticia='+MNoticia.Text);
    respuesta := http.Post('http://tekkenbolivia.net/archivos/php/noticias/envia_noticias.php', params);
    ShowMessage('Respuesta: ' + respuesta);
  finally
    http.Free;
    params.Free;
  end;
end;

para poder visualizar las noticias aqui.

http://tekkenbolivia.net/archivos/ph...cia_puesta.php

Bueno, ese no es mi código, pero el otro la única diferencia es que hace un POST a google y busca una palabra, pero en un bucle, una especie de robot google, pero mientras está buscando en google no muestra en el progresbar que tanto ya buscó, si quieren les pongo el código fuente.

saludos y gracias por las respuestas Dec
Responder Con Cita
  #5  
Antiguo 23-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
¿Donde asignas los eventos (IdHTTPWorkBegin, IdHTTPWork, IdHTTPWorkEnd) al objeto TidHttp?
Responder Con Cita
  #6  
Antiguo 23-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Si, en los eventos del componente idHTTP, no es ahí donde devería asignarlos ??
Así me lo ha explicado Dec, y así lo tiene en si adjunto. también ya puse el código con anterioridad de como lo hago, pero lo pongo de nuevo.

Código Delphi [-]
procedure TForm1.IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  PBProgreso.Max := AWorkCountMax;
  gProgreso.MaxValue := AWorkCountMax;
end;

procedure TForm1.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Application.ProcessMessages();
  PBProgreso.Position := AWorkCount;
  gProgreso.Progress := AWorkCount;
end;

procedure TForm1.IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  PBProgreso.Position := 0;
  gProgreso.Progress := 0;
end;

En este caso estoy usando un ProgressBar y un Gauge, pero ninguno se mueve.

Lo estoy haciendo mal seoane ? he entendido mal ?

saludos
Responder Con Cita
  #7  
Antiguo 23-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Seoane te lo preguntaba porque en el código que has puesto más arriba:

Código Delphi [-]
procedure TFrmPrincipal.BEnviarClick(Sender: TObject);
var
  http: TIdHttp;
  params: TStrings;
  respuesta: string;
begin
  http := TIdHTTP.Create(Self);
  params := TStringList.Create;
  try
    params.Add('titulo='+ETitulo.Text);
    params.Add('autor='+EAutor.Text);
    params.Add('noticia='+MNoticia.Text);
    respuesta := http.Post('http://tekkenbolivia.net/archivos/php/noticias/envia_noticias.php', params);
    ShowMessage('Respuesta: ' + respuesta);
  finally
    http.Free;
    params.Free;
  end;
end;

... estás creando el objeto "http" pero no estás asignándole luego a los eventos oportunos los métodos que se han de hacer cargo de los mismos...

Es decir, fijo que tú tienes un componente "IdHttp" en el formulario, para el cual preparas los eventos (ayudándote del Inspector de Objetos de Delphi), pero, a la hora de la verdad (al menos en el código que muestras) usas otro objeto ("http") y no el que se crea porque lo añadiste al formulario en tiempo de diseño... ¿se comprende la idea?

Si fuera esto tienes dos opciones: o bien utilizar el objeto "IdHttp" que añades en tiempo de diseño al formulario (y para el que preparas los eventos correspondientes), o bien al componente que creas tú mismo en tiempo de ejecución le asignas los métodos correspondientes a los eventos que quieres utilizar. Algo así:

Código Delphi [-]
procedure TFrmPrincipal.BEnviarClick(Sender: TObject);
var
  http: TIdHttp;
  params: TStrings;
  respuesta: string;
begin
  http := TIdHTTP.Create(Self);
  params := TStringList.Create;
  try
   { Aquí puede estar la madre del cordero }
    http.OnWork := MetodoParaWork;
    http.OnWorkEnd := MetodoParaWorkEnd;
    http.OnWorkBegin := MetodoParaWorkBegin;

    params.Add('titulo='+ETitulo.Text);
    params.Add('autor='+EAutor.Text);
    params.Add('noticia='+MNoticia.Text);
    respuesta := http.Post('http://tekkenbolivia.net/archivos/php/noticias/envia_noticias.php', params);
    ShowMessage('Respuesta: ' + respuesta);
  finally
    http.Free;
    params.Free;
  end;
end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 23-04-2007 a las 21:51:08.
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
Ajax.class.js - Sencilla forma de hacer peticiones HTTP en segundo plano dec PHP 10 11-01-2007 03:50:49
Librería para hacer peticiones HTTP para delphi 5 rlago Internet 3 06-11-2006 10:28:18
mandar un post http con idHTTP hidal C++ Builder 6 16-08-2006 01:02:57
IBDatase Insert Post Edit Post ariefez Firebird e Interbase 4 12-10-2005 01:53:04
Como hacer petición HTTP Bauhaus1975 Varios 2 13-06-2005 21:12:38


La franja horaria es GMT +2. Ahora son las 01:15:41.


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