![]() |
Form verhält sich mit ABS() anders als ohne
In einem Prog befindet sich diese Funktion:
Delphi-Quellcode:
Damit funktioniert auch alles.
procedure Progress(Size, CurrentPos: Int64);
var OPos, NPos : integer; begin OPos := MainForm.StatusMeter.Percent; NPos := Round(CurrentPos * 100 / Size); if (NPos <> OPos) then begin MainForm.StatusMeter.Percent := NPos - 1; Application.ProcessMessages; end; end; Wenn ich die Funktion aber so abändere:
Delphi-Quellcode:
wird zwar die Progressbar weiterhin aktualisiert, wie im ersten Beisspiel.
procedure Progress(Size, CurrentPos: Int64);
var OPos, NPos : integer; begin OPos := MainForm.StatusMeter.Percent; NPos := Round(Abs(CurrentPos * 100 / Size) - 1); << hier if (NPos <> OPos) then begin MainForm.StatusMeter.Percent := NPos; << und hier Application.ProcessMessages; end; end; Im Edit-Fenster wird aber nach der ersten Zeile nichts mehr angezeigt, bis alles geladen ist. Nicht, das mich das stört, solange es eine Ausweichmöglichkeit gibt. Aber es würde mich schon mal interessieren, warum das Verhalten so ist ? Hab ich einen Denkfehler ? |
Re: Form verhält sich mit ABS() anders als ohne
Delphi-Quellcode:
ist was anderes als
NPos := Round(CurrentPos * 100 / Size)-1 ;
Zitat:
|
Re: Form verhält sich mit ABS() anders als ohne
Zitat:
Gruß onlinekater |
Re: Form verhält sich mit ABS() anders als ohne
Zitat:
Nebenbei stand im Code-Ausschnitt
Delphi-Quellcode:
nicht
NPos := Round(Abs(CurrentPos * 100 / Size) - 1);
Delphi-Quellcode:
NPos := Round(CurrentPos * 100 / Size)-1 ;
Zitat:
Nein, also ich hätte wohl noch dazuschreiben sollen, was das Prog macht: Es füllt die Stringlist eines Edit-Fensters. Das tut es in beiden Fällen korrekt, nur in dem Beispiel mit dem Abs() sieht man es nach dem die erste Zeile erzeugt wurde nicht mehr. Wenn ich im Debugger das Füllen der Stringlist überwache, passiert bei beiden Beispielen das Gleiche. In beiden Fällen läuft die Progressbar sauber hoch, d.h. Application.ProcessMessages funktioniert. Nur beim 2.ten Beispiel wird das Edit-Fenster des Prog's nicht mehr ge-refresht. |
Re: Form verhält sich mit ABS() anders als ohne
Zitat:
|
Re: Form verhält sich mit ABS() anders als ohne
Zitat:
Aber 0 - 1 ist halt negativ, deshalb ABS. jetzt hab ich mal:
Delphi-Quellcode:
so abgeändert und siehe da, es funktioniert ebenfalls korrekt.
NPos := Round(CurrentPos * 100 / Size) - 1;
if (NPos > OPos) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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 by Thomas Breitkreuz