Indy -gt; FTP.OnWork não funciona (solução aqui!)

Delphi

15/03/2007

Dae galera,
Tive problemas para fazer funcionar o evento OnWork do componente idFTP da Indy. Estou utilizando a Indy versão 9, pq odiei a versão 10. (Mesmo assim, este problema acontece nas duas versões.)

O que acontece é que ao fazer o upload de um arquivo o evento OnWork simplesmente não funciona, e desse jeito fica impossível mostrar o progresso
da transação.

Bem, a solução que encontrei foi esta atualização para a biblioteca Indy, disponivel neste obscuro endereço que encontrei após muita procura e tempo perdido. :shock:

[url]http://indy.fulgan.com/ZIP/indy9.zip[/url]

Está é uma versão Developer Snapshot da biblioteca, portanto, use por conta e risco, para mim funcionou muito bem.

Abaixo, segue uma sugestão para implementação do progresso dos
downloads/uploads.


unit blablabla;
...

var
  LastTime: Cardinal;
  BytesToTransfer: Integer;
  AverageSpeed: Double;

implementation
...

procedure TfrmPrincipal.FTPWorkBegin(ASender: TObject;
  AWorkMode: TWorkMode; AWorkCountMax: Integer);
begin
  LastTime := GetTickCount;
  BytesToTransfer := AWorkCountMax;
  AverageSpeed := 0;
end;

procedure TfrmPrincipal.FTPWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
var
  Sec: Word;
  DelayTime: Double;
begin
  DelayTime := (GetTickCount - LastTime) / 1000;

  if DelayTime > 0 then
  begin
    AverageSpeed := (AWorkCount / 1024) / DelayTime;
    lbSpeed.Caption := FormatFloat(´0.00 KB/s´, AverageSpeed);
  end;
  
  if AverageSpeed > 0 then
  begin
    Sec := Trunc(((BytesToTransfer - AWorkCount) / 1024) / AverageSpeed);
    lbTime.Caption := StringReplace(Format(´¬2d:¬2d:¬2d´, [Sec div 3600, (Sec div 60) mod 60, Sec mod 60]),´ ´,´0´,[rfReplaceAll]);
  end;

  Progresso.Position := (AWorkCount * 100) div BytesToTransfer;
end;

end.



Aureliovs

Aureliovs

Curtidas 0

Respostas

Clovis Perazza

Clovis Perazza

15/03/2007

BytesToTransfer não consegue carregar.
Comigo não funcionou.
GOSTEI 0
POSTAR