Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I disable screen update which updating a lot of controls?

Tags:

delphi

I have a form with 50 or more controls which I create and add at runtime. I don't want to see then appear one by one; I would rather disable drawing/start buffering at the start & then see them all appear at once.

I seem to recall doing something like this in BCB about 10 years ago, but forget how.

like image 665
Mawg says reinstate Monica Avatar asked Sep 25 '10 02:09

Mawg says reinstate Monica


2 Answers

I'm not sure if there's a Delphi-specific method to do this, but using the Win32 API, this is done through the WM_SETREDRAW message.

Edit: Thanks to Ken White and Sertac Akyuz for the sample code below.

begin
  // Defer updates
  SendMessage(Handle, WM_SETREDRAW, WPARAM(False), 0);
  try
    // Create all your controls here
  finally
    // Make sure updates are re-enabled
    SendMessage(Handle, WM_SETREDRAW, WPARAM(True), 0);
    // Invalidate;  // Might be required to reflect the changes  
  end;
end;
like image 104
casablanca Avatar answered Oct 27 '22 01:10

casablanca


I simply keep Visible = False until everything's nice and ready.

like image 10
Cosmin Prund Avatar answered Oct 27 '22 02:10

Cosmin Prund