这可能听起来很傻,但是我遇到了一些情况,当我希望应用程序不显示正在发生的事情时,直到另一个特定的操作发生(stringGrids填充了数据,UI准备好......)。有没有办法阻止消息从应用程序发送到OS?
那么,是否有一些oposit
application.processmessages
? 类似的东西:
application.stopProcessingMessages;
fill stringGrids, prepare the UI...
application.processMessagesAgain;
当然,我可以在一个单独的线程中运行这些操作,但是在某些情况下我不想或不能在单独的线程中执行它。
答案 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;
表格准备好后,面板缩小,看不见等。它可靠地隐藏每一个看起来不太好的闪烁和其他东西,我想把它们隐藏起来。