Das ist nicht genau das was ich suche.
Manuell ist in meinem Fall definitiv besser. AnimateWindow macht nicht das was ich möchte.
Zacherl Lösung ist wirklich sehr gut und sieht gut aus. Nur verstehe ich nicht die Logik wie man es umkehrt.
Verstanden habe ich es zwar nicht, aber so läuft es fast. Er fährt von 20 (START) bis 200 (END). Umgekehrt funktioniert es nicht.
Delphi-Quellcode:
const
Duration = 3000;
POS_START = 20;
POS_END = 200;
if Button1.Left = POS_START then
begin
while (D < Duration) do
begin
Button1.Left := POS_START + Round(POS_END * CalculateEasingCurve(D, Duration));
Application.ProcessMessages;
D := GetTickCount - C;
end;
end
else
begin
while (D < Duration) do
begin
Button1.Left := POS_END - Round(POS_END * CalculateEasingCurve(D, Duration));
Application.ProcessMessages;
D := GetTickCount - C;
end;
end;
Vorzeitige Lösung
Delphi-Quellcode:
if Panel1.Width = POS_START then
begin
iNegative := 1;
iTmp := POS_START
end
else
begin
iNegative := -1;
iTmp := POS_START + POS_END;
end;
while (D < Duration) do
begin
Panel1.Width := iTmp + (Round(POS_END * CalculateEasingCurve(D, Duration)) * iNegative);
Application.ProcessMessages;
D := GetTickCount - C;
end;