Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2018
Missael Missael is offline
Miembro
NULL
 
Registrado: sep 2018
Posts: 37
Poder: 0
Missael Va por buen camino
ProgressBar + tiempo en realizar un GET HTTP

Buenos dias, tengo un problema con mi tiempo en que el progressBar se llena de manera total

Descargo un archivo y obtengo su Content-Length, quiero visualizar en un progressBar el avance de descarga con ese Content-Length del archivo, eh visto que con los componentes Indy en el TIdHttp se puede realizar, yo no estoy usando el componente como tal para invocar un evento, estoy declarando variables de tipo TIdHttp para realizar el GET.

¿Cómo puedo realizar esto?

Saludos
Responder Con Cita
  #2  
Antiguo 16-11-2018
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Independientemente de sitúes o no el componente de forma "visual", tendrás que usar los eventos que tienes disponibles en la clase "TIdHttp". Se trata, por tanto, de preparar los métodos adecuados para asignarlos a los eventos que necesites usar. Fíjate en el siguiente código.

Código Delphi [-]
type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
  private
    procedure IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
    procedure IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
    procedure IdHTTPWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
  end;

Arriba podemos ver que declaramos tres métodos privados en un formulario: en el mismo formulario tenemos un componente "ProgressBar" y también usamos el evento "FormCreate":

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  IdHttp: TIdHTTP;
begin
  IdHttp := TIdHTTP.Create();
  try
    IdHttp.OnWork := Self.IdHTTPWork;
    IdHttp.OnWorkBegin := Self.IdHTTPWorkBegin;
    IdHttp.OnWorkEnd := Self.IdHTTPWorkEnd;

    // IdHttp.Get();
  finally
    IdHttp.Free();
  end;
end;

Arriba vemos el evento "FormCreate", donde usamos utilizamos una variable del tipo "TIdHttp". Como ves, creamos la variable, asignamos los métodos que hemos preparado a los eventos que nos interesa, llevamos a cabo la llamada HTTP "GET", y, finalmente, destruímos la variable. Abajo puedes ver el cuerpo de los métodos en cuestión, preparados para ser asignados a los eventos de "TIdHttp":

Código Delphi [-]
procedure TForm1.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  ProgressBar1.Position := AWorkCount;
end;

procedure TForm1.IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
  ProgressBar1.Max := AWorkCountMax;
end;

procedure TForm1.IdHTTPWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  ProgressBar1.Position := 0;
end;

Como ves, en dichos eventos usamos el componente "ProgressBar" que tenemos en el formulario, para mostrar el progreso de la llamada HTTP.

P.D. Nota que aquí no usamos el "Content length" del archivo, sino que establecemos el "máximo" de nuestro "ProgressBar" con la variable "AWorkCountMax" que nos llega en el evento "IdHTTPWorkBegin". De hecho, si no he entendido mal, y, usas el "Content length" del archivo, una vez descargado el mismo... no tendría sentido mostrar ya "ProgressBar" alguno, puesto que el archivo ya ha sido descargado. Tal vez me estoy perdiendo algo...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 21-11-2018
Missael Missael is offline
Miembro
NULL
 
Registrado: sep 2018
Posts: 37
Poder: 0
Missael Va por buen camino
Lo que pasa es que el ContentLength lo obtenia para visualizarlo en el ProgressBar, esto dando clic a un botton 'Download' de esta forma en como me explicas, como puedo realizarlo?

un ejemplo, Si dicho archivo pesa 14000 Bytes, quiero que eso se vaya proyectando en el progressBar, para que el usuario pueda ver que esta trabajando el programa y unas vez descargados los 14000Bytes, el progressBar se llene, y mande un mensaje de 'Download Success'

Espero puedas apoyarme dec, Muchas Gracias
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
Realizar un "Post HTTP" con la clase "TIdHttp" de Indy dec Trucos 6 09-10-2018 19:59:40
progressbar 11_8_88 C++ Builder 2 04-11-2008 20:46:33
HTTP GET y HTTP POST utilizando WinInet dec Trucos 6 08-09-2008 12:52:03
Realizar cambios en varios Tmemo al mismo tiempo PaFernan99 OOP 5 26-05-2008 16:35:15
ProgressBar+tiempo en hacer POST HTTP BlackDaemon Internet 18 04-05-2007 02:24:14


La franja horaria es GMT +2. Ahora son las 06:54:00.


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