Wie kann ich mehr glatt meine Form Resize machen?
Frage
Wenn Sie ein Formular mit vielen Kontrollen Ändern der Größe, der Form wegen Flimmern schlecht aussieht. Was sind einige Tipps, um eine glattere Form Größenanpassung haben?
Lösung
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
Self.DisableAlign;
end;
procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
Self.EnableAlign;
end;
Andere Tipps
Versuchen WM_SETREDRAW mit ( nicht LockWindowUpdate ).
Sie können auch einen Blick auf DeferWindowPos .
Komplexe Formen werden oft aus verschachtelten Platten hergestellt, und der Neuzeichnungsindex Prozess führen kann flackern. Ist dies der Fall mit Ihrem Projekt gibt es zwei einfache Lösungen, die Macht Hilfe:
- Deaktivieren Sie die Eigenschaft
FullRepaint
auf Ihre Platten. - Aktivieren Sie die Eigenschaft
DoubleBuffered
auf dem Formular. Sie finden nicht diese Eigenschaft auf dem Objekt-Inspektoren finden, so setzenDoubleBuffered := true;
in Formcreate.
Ich habe um diese bekam wie folgt:
- In der ‚OnResize‘ Ereignis des Formulars, eine Routine alle untergeordneten Steuerelemente zu verstecken und dann einen Timer mit einem Haken von etwa 500 ms starten.
- Wenn die Timer Feuer, deaktivieren Sie es und legen Sie dann alle untergeordneten Steuerelemente sichtbar.
Durch das Spiel mit dieser Aktivität erhalten Sie ein Formular, das leer wird, während Sie es Sizing, aber dann füllt sich ordentlich, wenn Sie ‚loslassen‘.
Bri
I vermeiden Flackern von nicht mehr als Ausrichtung 1 nicht-alClient
Komponente pro Elternteil, immer mit einem alClient
gepaart (beispielsweise einem TPanel
), um alle anderen Komponenten enthalten. Gruppe sie in Platten ohne Grenzen.
Sagen Sie drei Dinge allign wollen: alLeft
, alTop
und alClient
für die Hauptansicht.
Dont dies tun:
Form
alTop
alLeft
alClient // your main view
Doch statt einbetten dieser wie folgt:
Form
alTop
alClient // panel to avoid flicker
alLeft
alClient // your main view
Die gleiche Geschichte für mehr alTop
Elemente eingebettet werden.