如何在更新大量控件时禁用屏幕更新?

问题描述 投票:0回答:2

我有一个包含 50 个或更多控件的表单,我在运行时创建和添加这些控件。我不想看到然后一一出现;我宁愿在开始时禁用绘图/开始缓冲,然后看到它们全部出现。

我好像记得大约10年前在BCB做过类似的事情,但忘记了是怎么做的。

delphi
2个回答
53
投票

我不确定是否有特定于 Delphi 的方法可以执行此操作,但使用 Win32 API,这是通过

WM_SETREDRAW
消息完成的。

编辑: 感谢 Ken White 和 Sertac Akyuz 提供下面的示例代码。

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;

12
投票

我只是保持 Visible = False 直到一切都准备好为止。

© www.soinside.com 2019 - 2024. All rights reserved.