Zitat:
imageX.top := imageX.top + 5;
Wenn sich etwas gleichmäßig bewegen soll, dann keine festen Schritte verwenden und nicht einfach annehmen ein Timer würde wimmer regelmäßig/gleichmäßig arbeiten.
ImageX.Top := ImageX.Top + Round(ZeitSeitLetztemSchritt / ZeitProIntervall * SchrittweiteProZeitintervall);
.
beim Start
Zeit := GetTickCount;
setzen und dann
Delphi-Quellcode:
procedure Timer1Timer(...);
var
Schritt: Integer;
begin
Schritt := ((GetTickCount - Zeit) * 5) div Timer1.Intervall;
// eventuell stattdessen mit Runden auf ganze Schritte:
// Schritt := Max(Round((GetTickCount - Zeit) / Timer1.Intervall), 1) * 5;
// Schritt := Max((GetTickCount - Zeit + Timer1.Intervall div 2) div Timer1.Intervall, 1) * 5;
Zeit := GetTickCount;
...
ImageX.Top := ImageX.Top + Schritt;
...
end;
Würde jetzt der Timer mal ein paar Intervalle überspringen, würde auch das Bild mitspringen und optisch bleibt es eine gleichmäßige Bewegung, von der Entfernung her.