Ja, so ähnlich habe ich es jetzt auch gelöst, ich habe eine Variable auf false gesetzt, sie wird über einen Timer true gesetzt und wenn sie true ist, dann wird im OnWork der Code für die Anzeige ausgeführt und die Variablen werden neu gesetzt, ansonsten passiert nichts
Dein Code würde garantiert nicht gehen... Du verwendest AWorkCount im Timer, hast dieses aber nirgends gesetzt ^^
Hier mein Code:
var RunUpdate:boolean=false;
Delphi-Quellcode:
procedure TForm1.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
var Speed:integer; //Bytes pro sekunde
begin
if RunUpdate then begin
RunUpdate:=false;
if (GetTickCount-FTime)>0 then Speed:=Round(1000*(AWorkCount-FBytes)/(GetTickCount-FTime))
else Speed:=0;
SpeedStatus.Caption:=GetSizeName(Speed)+'/s';
FTime:=GetTickCount;
FBytes:=AWorkCount;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
RunUpdate:=true;
end;
Natürlich wäre es nicht nötig, die Geschwindigkeit als Variable zu speichern, aber ich benötige sie noch ein paar mal mehr im OnWork und das hier ist nur der zentrale Code für die Geschwindigkeit. So wird diese auch schön in B/s, kB/s, MB/s usw. ausgegeben ^^
MfG Z4ppy
PS.: Wieso machst du das Format eigentlich in einem try-except-Block? Wenn GetTickCount-FTime>0 gilt, dürften ja keine Probleme auftreten können...