Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi FTP Fortschritt > Progressbar (https://www.delphipraxis.net/92618-ftp-fortschritt-progressbar.html)

napsterxx 23. Mai 2007 12:38


FTP Fortschritt > Progressbar
 
Delphi-Quellcode:
procedure TMainForm.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := AWorkCountMax;
  ProgressBar1.Position := 0;
end;

procedure TMainForm.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
Var
  S: String;
  TotalTime: TDateTime;
  H, M, Sec, MS: Word;
  DLTime: Double;
begin
  //Errechnen der Transfergeschwindigkeit:
  TotalTime := Now - STime;
  DecodeTime(TotalTime, H, M, Sec, MS);
  Sec := Sec + M * 60 + H * 3600;
  DLTime := Sec + MS / 1000;
  if DLTime > 0 then
    AverageSpeed := (AWorkCount / 1024) / DLTime;
  S := FormatFloat('0.00 KB/s', AverageSpeed);
  case AWorkMode of
    wmRead: StatusBar1.Panels[1].Text := 'Download speed ' + S;
    wmWrite: StatusBar1.Panels[1].Text := 'Uploade speed ' + S;
  end;

  //Aktualisieren der Fortschrittsanzeige:
  ProgressBar1.Position := AWorkCount;
end;
@Quelle: http://www.dsdt.info/tutorials/indy/?page=4

Laut diesem Code soll man sich den Fortschritt des Down-/ Uploades anzeigenlassen können sollen. Ja mein Problem dürfte nicht all zu Überraschend sein:
Wieso funktioniert mein Code nicht?

Delphi-Quellcode:
procedure TForm2.IdFTP2WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
begin
Form4.ProgressBar1.Max := AWorkCountMax;
  Form4.ProgressBar1.Position := 0;
end;

procedure TForm2.IdFTP2Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
Var
  S: String;
  TotalTime: TDateTime;
  H, M, Sec, MS: Word;
  DLTime: Double;
begin
application.processMessages;
  //Errechnen der Transfergeschwindigkeit:
  TotalTime := Now - STime;
  DecodeTime(TotalTime, H, M, Sec, MS);
  Sec := Sec + M * 60 + H * 3600;
  DLTime := Sec + MS / 1000;
  if DLTime > 0 then
    AverageSpeed := (AWorkCount / 1024) / DLTime;
  S := FormatFloat('0.00 KB/s', AverageSpeed);
  case AWorkMode of
    wmRead: Form4.StatusBar1.Panels[1].Text := 'Download speed ' + S;
    wmWrite: Form4.StatusBar1.Panels[1].Text := 'Uploade speed ' + S;
  end;

  //Aktualisieren der Fortschrittsanzeige:
  Form4.ProgressBar1.Position := AWorkCount;
end;
mfg napsterXX

Die Muhkuh 23. Mai 2007 12:39

Re: FTP Fortschritt > Progressbar
 
Hmm,

ich denke mal, dass Du vergessen hast, die Schäfchen zu zählen. :zwinker:

Was geht denn nicht? Schon mal mit dem Debugger nachgeschaut?

napsterxx 23. Mai 2007 12:45

Re: FTP Fortschritt > Progressbar
 
Was nicht geht kann ich nicht so genau sagen. Also folgendes: Wenn ich mit dem Download einer Datei beginne bleibt mein kompletter PC stehen. Es hilft nur noch ein Neustart. Nichts anderes. Eigendlich hatte ich ja dieses das das Programm nicht einfriert:
application.processMessages;

Als ich dies im OnWork Ereignis hatte ohne die Aktuallisierung der Progressbar ist es auch nicht eingefroren. Nun ja. Mehr kann ich nicht sagen.

CCRDude 23. Mai 2007 13:43

Re: FTP Fortschritt > Progressbar
 
Hmmm weiß nicht mehr genau ob das bei Indy genauso ist, aber bei Synapse ist der WorkCount nur die Größe des aktuellen Paketes, NICHT die Gesamtgröße zum aktuellen Zeitpunkt. Das müsste dann von Hand aufsummiert werden, sonst ist der Balken immer ganz am Anfang.

Zweitens sollte man Position und Max wohl eher nicht direkt auf die Größe setzen, soll ja vorkommen daß mal jemand eine größere Datei verschiebt, die den Rahmen dort sprengt. Besser in Prozente umrechnen. Wobei, wenn Indy eh maximal MaxInt als Größe kann auch wieder nicht so wichtig.

Gegen das Hängend-Erscheinen gabs doch bei den Indys dieses TIdAntiFreeze?

napsterxx 23. Mai 2007 13:49

Re: FTP Fortschritt > Progressbar
 
Ja aber das funktionierte bei mir nicht.

Born-to-Frag 23. Mai 2007 18:41

Re: FTP Fortschritt > Progressbar
 
hm.. 2mal der gleiche Code, einmal mit Application.ProcessMessages, einmal ohne?
Machs oben doch auch mal hin.. oder lädst du mit IdFTP2?

BTW: Das stehenbleiben des Threads ist klar.. du müsstest halt noch nen 2. Thread erstellen...


greetz

€: Lass dir doch mal WorkCount ausgeben, oder erhöh die Progressbar mal immer um 100 zum Test oder irgendsowas..

napsterxx 24. Mai 2007 17:32

Re: FTP Fortschritt > Progressbar
 
So leutz habs nun anders gemacht und es geht. Naja Code kopieren ist wohl nicht das ware ;) hehe

inherited 24. Mai 2007 19:37

Re: FTP Fortschritt > Progressbar
 
1. Bin ich nicht "leutz" :roll:
2. Wärst du so nett deinen Code zu Posten, damit noch andere von deinen geistigen Ergüssen profitieren können?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz