When resizing a form with many controls, the form looks bad because of flickering. What are some tips to have a smoother form resizing?
I avoid flicker by aligning no more than 1 non-alClient
component per parent, always paired with a alClient
(e.g. a TPanel
) to contain all other components. Group them in panels without borders.
Say you want to allign three things: alLeft
, alTop
and alClient
for the main view.
Dont do this:
Form
alTop
alLeft
alClient // your main view
But instead embed these as follows:
Form
alTop
alClient // panel to avoid flicker
alLeft
alClient // your main view
Same story for embedding several alTop
elements.
Try using WM_SETREDRAW (not LockWindowUpdate).
You might also have a look at DeferWindowPos.
I've got around this as follows:
By playing around with this activity you get a form that goes blank whilst you are sizing it, but then populates itself neatly when you 'let go'.
Bri
Complex forms are often made up of nested panels, and the repaint process may cause flickering. If this is the case with your project there are two easy solutions that might help:
FullRepaint
on your panels. DoubleBuffered
on your form. You won't find this property on the object inspector, so put DoubleBuffered := true;
in FormCreate.procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
Self.DisableAlign;
end;
procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
Self.EnableAlign;
end;