![]() |
Ftp Fortschrittsanzeige
Hi!
Mal wieder plagt mich ein Problem: Und zwar will die Fortschrittsanzeige ganz und gar nicht den Fortschritt anzeigen, seht selbst: Der Upload funzt mit Statusanzeige, ansonsten gar nix. Außerdem zeigt er die Geschwindigkeit falsch an. Woran kanns liegen?
Delphi-Quellcode:
PROCEDURE TForm3.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: Form1.Lbspeed.Caption := 'Download speed ' + S; wmWrite: Form1.Lbspeed.Caption := 'Upload speed ' + S; END; //Aktualisieren der Fortschrittsanzeige: Form1.ProgressBar1.Position := AWorkCount; END; //////////// PROCEDURE TForm3.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; CONST AWorkCountMax: Integer); BEGIN Form1.ProgressBar1.Max := AWorkCountMax; Form1.ProgressBar1.Position := 0; END; ![]() Danke schonmal! Lamy |
Re: Ftp Fortschrittsanzeige
Zitat:
Delphi-Quellcode:
//Aktualisieren der Fortschrittsanzeige:
Form1.ProgressBar1.Position := AWorkCount; // sichtbar machen Form1.ProgressBar1.Refresh; // <=== Zitat:
Delphi-Quellcode:
begin
//Errechnen der Transfergeschwindigkeit: TotalTime := Now - STime; DLTime := TotalTime*24.0*60.0*60.0; // =vergangene Zeit in Sekunden IF DLTime > 0.0 THEN AverageSpeed := (AWorkCount / 1024) / DLTime; ... Form1.Lbspeed.Refresh; |
Re: Ftp Fortschrittsanzeige
Hallo!
Deine Tips haben leider keine Wirkung gezeigt =( |
Re: Ftp Fortschrittsanzeige
Zitat:
Du musst sicherstellen dass die Variable STime wirklich gesetzt wird; am Besten macht man dies in TForm3.IdFTP1WorkBegin:
Delphi-Quellcode:
Dann muss du auf die Methoden TForm3.IdFTP1WorkBegin und TForm3.IdFTP1Work einen Breakpoint
STime := SysUtils.Now;
setzen und nachprüfen, ob die Methoden wirklich aufgerufen werden. Im Einzelschrittmodus (F8 ) überprüfst du die Inhalte der Variablen DLtime und AWorkCount sowie AverageSpeed. (liefert AWorkCount wirklich die Anzahl der Bytes ?) Du musst sicherstellen, dass AWorkMode wirklich den erwarteten Wert hat:
Delphi-Quellcode:
CASE AWorkMode OF
wmRead: Form1.Lbspeed.Caption := 'Download speed ' + S; wmWrite: Form1.Lbspeed.Caption := 'Upload speed ' + S; else Form1.Lbspeed.Caption := 'unknown work mode'; // <== man weiss ja nie END; |
Re: Ftp Fortschrittsanzeige
Hi!
Leider sagt mir dein Beitrag nicht allzu viel aus; Was ist zum Beispiel ein Breakpoint? P.s: Der Code sollte eigentlich funktionieren, hab ihn aus der Demo und von ![]() |
Re: Ftp Fortschrittsanzeige
bei mir funktioniert der code (mit STime = Now), nur bei den indys gibts noch ein bug: ich hab mal beim get und put im onworkbegin-ereignis die größe von AWorkCountMax überprüft und bei mir wird da 0 angezeigt... der rest funktioniert bei mir auch :?
breakpoint = unterbrechung in einer funktion, die kannst du setzen und löschen, indem du links neben eine zeilennummer im editierfeld clickst... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 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