Fórum ProgressBar não funciona #418592
16/06/2012
0
Vejam o código abaixo:
unit U_FTPDownload;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdFTP, ComCtrls, DateUtils, IdAntiFreezeBase, IdAntiFreeze;
type
TF_FTPDownload = class(TForm)
ButtonConectar: TButton;
ButtonDesconectar: TButton;
IdFTP1: TIdFTP;
ProgressBar: TProgressBar;
LabelConect: TLabel;
IdAntiFreeze1: TIdAntiFreeze;
procedure ButtonConectarClick(Sender: TObject);
procedure ButtonDesconectarClick(Sender: TObject);
procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
private
{ Private declarations }
BytesToTransfer: LongWord;
public
{ Public declarations }
end;
var
F_FTPDownload: TF_FTPDownload;
implementation
{$R *.dfm}
procedure TF_FTPDownload.ButtonConectarClick(Sender: TObject);
begin
if not IdFTP1.Connected then
begin
IdFTP1.TransferType := ftBinary;
IdFTP1.User := usuario;
IdFTP1.Password := password;
IdFTP1.Host := ftp.meuftp.com.br;
IdFTP1.Connect;
LabelConect.Enabled := true;
LabelConect.Caption := Transferindo;
ButtonConectar.Enabled := false;
ButtonDesconectar.Enabled := false;
IdFTP1.ChangeDir(/);
IdFTP1.Get(DADOS.DBF , DADOS.DBF , true);
ButtonDesconectar.Enabled := true;
end;
if IdFTP1.Connected then
begin
LabelConect.Caption := Conectado;
ButtonConectar.Enabled := false;
ButtonDesconectar.Enabled := true;
end;
end;
procedure TF_FTPDownload.ButtonDesconectarClick(Sender: TObject);
begin
if IdFTP1.Connected then
begin
IdFTP1.Disconnect;
ButtonConectar.Enabled := true;
ButtonDesconectar.Enabled := false;
LabelConect.Caption := Desconectado;
end;
end;
procedure TF_FTPDownload.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
ProgressBar.Position := AWorkCount;
end;
procedure TF_FTPDownload.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
if AWorkCountMax > 0 then
ProgressBar.Max := AWorkCountMax
else
ProgressBar.Max := BytesToTransfer;
end;
procedure TF_FTPDownload.IdFTP1WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
BytesToTransfer := 0;
ProgressBar.Position := 0;
end;
end.
Alguem pode me dar uma luz?
Clovis Perazza
Curtir tópico
+ 0Posts
16/06/2012
Bruno Leandro
procedure TF_FTPDownload.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
ProgressBar.Position := ProgressBar.Position + AWorkCount;
end;
procedure TF_FTPDownload.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
ProgressBar.Min := 0;
if AWorkCountMax > 0 then
ProgressBar.Max := AWorkCountMax
else
ProgressBar.Max := BytesToTransfer;
end;
Gostei + 0
16/06/2012
Clovis Perazza
Coloquei uma Label na procedure para poder visualizar o valor do ProgressBar.Position, mas o valor fica sempre 0 (zero).
////////
procedure TF_FTPDownload.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
ProgressBar.Position := ProgressBar.Position + AWorkCount;
Label1.Caption := IntToStr(ProgressBar.Position); <-----
end;
////////
Já não tô entendendo mais nada.
Gostei + 0
16/06/2012
Clovis Perazza
Descobri cara.
Coisa besta que a gente não observa.
Eu não estava carregando a variável BytesToTransfer , que define a posição máxima da ProgressBar.
Eu a defini em Privates mas esqueci de carrega-la.
Então não há necessidade de alterar meu código como você sugeriu, bastou isso:
///////
if not IdFTP1.Connected then
begin
IdFTP1.TransferType := ftBinary;
IdFTP1.User := perazza;
IdFTP1.Password := 07081426;
IdFTP1.Host := ftp.xpg.com.br;
IdFTP1.Connect;
LabelConect.Enabled := true;
LabelConect.Caption := Transferindo;
ButtonConectar.Enabled := false;
ButtonDesconectar.Enabled := false;
IdFTP1.ChangeDir(/);
BytesToTransfer := IdFTP1.Size(DADOS.DBF); <-----------------------
IdFTP1.Get(DADOS.DBF , DADOS.DBF , true);
ButtonDesconectar.Enabled := true;
end;
////////////////
Valeu pela sua ajuda.
Um grande abraço.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)