Einzelnen Beitrag anzeigen

IceTube
(Gast)

n/a Beiträge
 
#5

Re: [indy]Verbleibende Zeit eines Downlods anzeigen

  Alt 5. Jul 2008, 17:36
Zitat von Apollonius:
StrToFloat zusammen mit Format solltest du dir abgewöhnen - ich sehe auch keinen Sinn darin. Und entferne diese ganzen Try-Except-Blöcke. Du solltest Exceptions vermeiden, nicht schlucken.
Stimmt eigentlich
Hab in dem neuen Code das korrigiert!

Ich hab die Lösung jetzt gefunden...

Delphi-Quellcode:
//Variablen
private
{ Private-Deklarationen } 
public
{ Public-Deklarationen } 
FBytes,FTime : real;
Max : real;
end;

procedure TForm1.httpWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
var speed,R : real;
min,sec : real;
begin
Application.ProcessMessages;

//Berechne Speed
if not((GetTickCount - FTime) >= 1000) then begin
speed := (AWorkCount - FBytes) / (GetTickCount - FTime);

//Werte erfassen
FTime := GetTickCount;
FBytes := 0;
end;

//Verbleibende Zeit
if(speed > 0) then begin
//
try
//Versuche die (Gesamtgröße - aWorkCount) durch die Geschwindigkeit zu dividieren
R := Round((Max-aWorkCount)/speed);
except
end;
//
try
//Sekunden berechnen - wieso es durch 1000 geht, weiß ich nicht so genau ...
Sec := Round(R / 1000);

//Minuten - natürlich Sekunden durch 60 dividieren
Min := Round(Sec / 60);
Sec := Sec - (Min*60);

//Kontrolle der Werte
if Sec < 0 then Sec := Sec *(-1);
if Min < 0 then Min := 0;
except
end;

//Ausgeben
xZeit.Caption := floatToStr(Min)+':'+floatToStr(Sec);

end;

//Werte erfassen
FTime := GetTickCount;
FBytes := aWorkCount;
end;

procedure TForm1.httpWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
begin
//Gesamtgröße
Max := AWorkCountMax;

//Werte erfassen
FTime := GetTickCount;
FBytes := 0;
end;
lg
  Mit Zitat antworten Zitat