Comment puis-je faire ma forme Redimensionner plus en douceur?
Question
Lors du redimensionnement d'une forme avec de nombreux contrôles, la forme semble mauvais à cause de scintillement. Quels sont quelques conseils pour avoir un redimensionnement de forme plus lisse?
La solution
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
Self.DisableAlign;
end;
procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
Self.EnableAlign;
end;
Autres conseils
Essayez d'utiliser WM_SETREDRAW ( pas LockWindowUpdate ).
Vous pouvez également jeter un oeil à DeferWindowPos .
formes complexes sont souvent constitués de panneaux imbriqués, et le processus de repeindre peuvent provoquer des scintillements. Si tel est le cas avec votre projet, il y a deux solutions faciles qui peut help:
- Désactiver la propriété
FullRepaint
sur vos panneaux. - Activer la propriété
DoubleBuffered
sur votre formulaire. Vous ne trouverez pas cette propriété sur l'inspecteur d'objets, alors mettezDoubleBuffered := true;
FormCreate.
J'ai autour de cela comme suit:
- Dans le cas « OnResize » de la forme, ont une routine pour cacher tous les contrôles enfants et commencer une minuterie avec une tique d'environ 500 ms.
- Lorsque les feux de la minuterie, désactivez puis définissez tous les contrôles enfants à visibles.
En jouant avec cette activité, vous obtenez une forme qui se vide pendant que vous le dimensionnement, mais se remplit alors d'une manière ordonnée lorsque vous lâchez.
Bri
I éviter le scintillement en alignant pour contenir tous les autres composants ne dépassant pas 1 composant non alClient
par parent, toujours associé à un alClient
(par exemple un TPanel
). Regroupez-les dans les panneaux sans frontières.
Dites que vous voulez allign trois choses: alLeft
, alTop
et alClient
pour la vue principale.
Ne faites ceci:
Form
alTop
alLeft
alClient // your main view
Mais au lieu intégrer ceux-ci comme suit:
Form
alTop
alClient // panel to avoid flicker
alLeft
alClient // your main view
Même chose pour intégrer plusieurs éléments alTop
.