Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Ftp Fortschrittsanzeige (https://www.delphipraxis.net/22402-ftp-fortschrittsanzeige.html)

Lamy 17. Mai 2004 12:05


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;
Hier gibts den Client


Danke schonmal!

Lamy

shmia 17. Mai 2004 13:03

Re: Ftp Fortschrittsanzeige
 
Zitat:

Zitat von Lamy
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.

Versuch mal:
Delphi-Quellcode:
  //Aktualisieren der Fortschrittsanzeige:
  Form1.ProgressBar1.Position := AWorkCount;
  // sichtbar machen
  Form1.ProgressBar1.Refresh; // <===
Zitat:

Zitat von Lamy
Außerdem zeigt er die Geschwindigkeit falsch an.

Die Anzahl der Sekunden lässt sich einfacher so berechnen:
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;

Lamy 17. Mai 2004 13:36

Re: Ftp Fortschrittsanzeige
 
Hallo!

Deine Tips haben leider keine Wirkung gezeigt =(

shmia 17. Mai 2004 13:58

Re: Ftp Fortschrittsanzeige
 
Zitat:

Zitat von Lamy
Deine Tips haben leider keine Wirkung gezeigt

Macht nix, jetzt kommt Stufe 2:
Du musst sicherstellen dass die Variable STime wirklich gesetzt wird; am Besten
macht man dies in TForm3.IdFTP1WorkBegin:
Delphi-Quellcode:
STime := SysUtils.Now;
Dann muss du auf die Methoden TForm3.IdFTP1WorkBegin und TForm3.IdFTP1Work einen Breakpoint
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;

Lamy 17. Mai 2004 15:28

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 http://www.delphi-source.de/tutorials/indy/?page=4...

Basic-Master 19. Mai 2004 21:54

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