Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TIdFtp y ProgressBar (https://www.clubdelphi.com/foros/showthread.php?t=56434)

salvica 16-05-2008 22:43:27

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

poliburro 16-05-2008 23:38:20

Que componente utilizas? Indy?

sitrico 16-05-2008 23:42:31

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.

salvica 16-05-2008 23:59:37

Cita:

Empezado por poliburro (Mensaje 287334)
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. :mad:

Gracias
salvica

salvica 17-05-2008 02:30:06

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 ):mad:

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

Saludos
salvica

sitrico 22-05-2008 18:33:52

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

Cañones 13-08-2010 00:13:23

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.


La franja horaria es GMT +2. Ahora son las 01:57:18.

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