Ich verschiebe ein TMemo
Objekt links und rechts in meiner GUI-Anwendung. Das Problem ist, dass die Buchstaben in meinem TMemo
flackern, sobald die Bewegung beginnt.Wie zu vermeiden, flackern beim Animieren von GUI-Komponenten in Lazarus
Ich habe dies nachgeschlagen, und anscheinend die Einstellung der DoubleBuffering
Eigenschaft meines Hauptformulars sollte mir geholfen haben, aber es tat nicht. Also habe ich versucht, diese Eigenschaft für alle bewegten Objekte auf true zu setzen, aber das Flimmern war immer noch vorhanden.
Gibt es Möglichkeiten, flackerfreie Animationen von GUI-Komponenten in Lazarus zu erreichen? Ich bin ein Neuling in Lazarus, also suche ich gerade blind nach Lösungen. Ich würde wirklich etwas Hilfe schätzen.
weiteren Kontext, hier ist, wie ich meine animieren TMemo
: Ich habe einen TTimer
mit einem Intervall von 10 bekam, und seine OnTimer
Ereignis bewegt sich mein TMemo
links und rechts zusammenhängend. Um die Bewegung etwas weicher zu machen, habe ich eine einfache Cosinus-Interpolationsfunktion hinzugefügt.
Am Ende hier ist der Code:
procedure TServerSideForm.ControlPanelHideTimerTimer(Sender: TObject);
begin
if (hideAnimVal < 1) then
begin
hideAnimVal := hideAnimVal + 0.025;
end
else
begin
MemoHideTimer.Enabled:=false;
end;
// hideStart - starting position of my TMemo, hideEnd - end position of my TMemo
hideCurr := Round(CosineInterpolation(hideStart, hideEnd, hideAnimVal));
Memo.Left:=hideCurr;
end;
Cosinus Interpolation:
function CosineInterpolation(Val1, Val2, Angle: Double): Double;
var
Percent: Double;
begin
Percent := (1-Cos(Angle*PI))/2;
Result := (Val1 * (1 - Percent) + Val2 * Percent);
end;