Gerade beim Progressbar ist eine hohe Genauigkeit nicht erforderlich, mehr als 100 Positionen sind optisch kaum unterscheidbar.
Die Berechnung der neuen Progressbarposition darf sich dabei aber nur auf den neuen Absolutwert stützen.
Delphi-Quellcode:
{Die resultierende Position des Progressbar mit Wertebereich 0..1}
function NormalProgress(ACurrentPos, AMinPos, AMaxPos: Int64): Float;
begin
Result := (ACurrentPos - AMinPos) / (AMaxPos - AMinPos);
end;
procedure SetProgressBarPos(APos, AMinPos, AMaxPos: Int64);
begin
{z.B. Progressbar.Max = 100}
ProgressBar.Position := Round(NormalProgress(Pos, AMinPos, AMaxPos) * ProgressBar.Max);
end;