Delphi - 保存系统消息/阻止UI重绘?

时间:2016-03-24 17:04:54

标签: delphi user-interface redraw

这可能听起来很傻,但是我遇到了一些情况,当我希望应用程序不显示正在发生的事情时,直到另一个特定的操作发生(stringGrids填充了数据,UI准备好......)。有没有办法阻止消息从应用程序发送到OS?

那么,是否有一些oposit

application.processmessages

? 类似的东西:

application.stopProcessingMessages;

fill stringGrids, prepare the UI...

application.processMessagesAgain;

当然,我可以在一个单独的线程中运行这些操作,但是在某些情况下我不想或不能在单独的线程中执行它。

2 个答案:

答案 0 :(得分:2)

检查TDataSet.DisableControls以获取数据感知控件,检查某些VCL / RTL类(包括TStrings)的BeginUpdate / EndUpdate,以及 - 特定于上述TStringGrid - 请参阅Delphi TStringGrid Flicker

答案 1 :(得分:0)

事实证明,虽然我认为,使用WM_SETREDRAW消息是正确的解决方案,但它有一些缺点。最大的一个是,如果使用,用户可以点击表单。所以最终的解决方案就是将一个空的TPanel放在整个表单上,就像这样

  panel1.Left:= 0;
  panel1.Top:= 0;
  panel1.Width:= frmMain.Width;
  panel1.Height:= frmMain.Height;

表格准备好后,面板缩小,看不见等。它可靠地隐藏每一个看起来不太好的闪烁和其他东西,我想把它们隐藏起来。