Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-05-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
TIdFtp y ProgressBar

Hola de nuevo

Estoy intentando hacer un cliente FTP para recibir archivos, y en el form he puesto dos ProgressBar

En la que indica el archivo transferido trabaja Ok (total, los leo de un StringList)

El "problema" lo tengo con la barra de descargas, no se actualiza o mejor dicho, parece que lo hace al acabar la descarga.


He mirado en el foro y las soluciones son parecidas a las que tengo (que por cierto las saqué de otro foro de Delphi en francés). Os pongo el código por si tuviese que hacer algo más

Código Delphi [-]

procedure TForm_Ftp_Win.IdFTP_OnWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
{ al empezar la transferencia }
  ProgressBar_FTP.Max      := AWorkCountMax;
  ProgressBar_FTP.Position := 0 ;
  (*
  if( AWorkMode=wmRead ) then //uniquement quand le composant recoit des données
  begin
    ProgressBar_FTP.Max      := AWorkCountMax; //Maximum = taille de l'élément
    ProgressBar_FTP.Position := 0; //Position à zéro
    //ProgressBar_FTP.Visible  := true;
  end;
  *)
end;

procedure TForm_Ftp_Win.IdFTP_OnWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
{ visualizar la descarga del fichero }
  Application.ProcessMessages;
  ProgressBar_FTP.Position := AWorkCount;
  ProgressBar_FTP.Refresh; (* Esto es de Román, pero tampoco hace nada *)
  (*
  if AWorkMode=wmRead then //uniquement quand le composant recoit des données
     ProgressBar_FTP.Position := AWorkCount;
  *)
end;

procedure TForm_Ftp_Win.IdFTP_OnWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
{ al finalizar la transferencia }
  //ProgressBar_FTP.Visible  := false;
  ProgressBar_FTP.Position := 0;
end;
Lo que tengo como comentario (* *) es el código original.

¿Podeis echarme una mano?

Gracias anticipadas
salvica
Responder Con Cita
  #2  
Antiguo 16-05-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Que componente utilizas? Indy?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 16-05-2008
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 21
sitrico Va por buen camino
La verdad actualizar las progressBar mientras se realizan procesos con IdFtp no ha sido mi fuerte (a veces me funciona y otras nó) pero prueba con:

Código Delphi [-]
Self.Refresh; // actualizar todo el formulario
Self.Repaint;
ProgressBar.Invalidate

La verdad no entiendo como un componente tan comun y frecuente requiera que forcemos un refresh siendo claro que el metodo SetPosition del objeto debería encargarse de redibujar la barra.

Espero te sirva algo.
__________________
Sitrico
Responder Con Cita
  #4  
Antiguo 16-05-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
Que componente utilizas? Indy?
Tienes razón poliburro, se me olvidó. utilizo Delphi-7 e Indy-9.0.18

sitricoHe puesto los refresh en el OnWork del IdFTP y nada, sigue sin refrescar la barra.

Gracias
salvica
Responder Con Cita
  #5  
Antiguo 17-05-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Bueno, pues parece que la solución está en Trucomanía, ellos ponen:
Código Delphi [-]
   ...
   ProgressBar.Max := IdFTP.Size( FicheroFtp );
   BeginWork( wmRead );
   try
      Get( FicheroFtp, FicheroLocal, true, false );
   finally
      EndWork( wmRead );
   end;
   ...

Y la barra se actualiza (aunque, a mí no me llega hasta el final )

Lo he intentado cambiando
Código Delphi [-]
   FileSize               := IdFTP.Size( FicheroFtp );
   ProgressBar.Max   := FileSize;
   ProgressBar.Step  := FileSize div IdFTP.RecvBufferSize;
pero no me funciona

Saludos
salvica
Responder Con Cita
  #6  
Antiguo 22-05-2008
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 21
sitrico Va por buen camino
Lo de que la barra no llega al final me ha pasado más veces de las que quisiera admitirlo, por lo que generalmente al terminar un proceso asociado a un progressbar agrego:
Código Delphi [-]
ProgressBar.Position = ProgressBar.Max; // Forzar 
Sleep(250); // Para darle oportunidad al usuario de ver la barra completa
// Antes de ocultar la barra
__________________
Sitrico
Responder Con Cita
  #7  
Antiguo 13-08-2010
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Duda sobre donde coloco el TidFTP

Hola, tengo una duda sobre donde colocar el TidFTP.
Lo quiero poner en un datamodule para aislar la conexión de la parte gráfica.
Si lo coloco en el datamodule, como puedo refrescar el progressbar en el formulario principal?

Desde ya muchas gracias.
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
ayuda con Tidftp Muchachin Internet 0 30-05-2007 23:38:26
TidFTP problema con ftp en win98 adfa Internet 0 06-06-2006 20:21:22
tidftp, saber si un directorio existe chux Internet 0 17-05-2006 17:44:11
Bajar fichero por ftp usando TIDFtp chux Internet 2 16-05-2006 09:16:13
TidFTP MaGNa Internet 0 10-01-2005 14:00:10


La franja horaria es GMT +2. Ahora son las 18:36:38.


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