Application.ProcessMessages命令是众所周知的,我会在很长的过程中使用它,以确保我的程序不会占用计算机。
但是我有一组相当快速的处理程序,其中我将视图缓冲到文件中。在缓冲过程中,可能会发送一些系统消息(例如重绘或滚动条移动或其他事件)。我想防止这些消息被ProcessMessages处理,直到缓冲完成。
有什么办法可以:
在我的过程完成之前,请阻止Application.ProcessMessages,或者
捕获过程中生成的所有消息,直到过程结束才释放它们。
最佳答案
即使ProcessMessages
发送不需要的消息,继续允许它也不应被认为是有问题的。通过一些代码重构,您可以将缓冲方法移到单独的线程中并从那里移走。
如果您尝试将控件的“可视内容”复制到文件中,
查看WM_PRINT(xxx)消息,该消息允许子控件将自身绘制到位图中
尝试LockWindowUpdate
Win32 API方法调用,该方法将关闭所有到该控件的绘画消息
如果需要,可以覆盖控件类甚至父类上的WndProc
/ DefaultWndProc
方法,并为每个发送的消息简单地返回“ true”
在控件类甚至父类上覆盖特定的控制方法(例如“滚动条已移动”,“ OnPaint
”,“ OnPaintBackground
”等),并且如果正在进行缓冲,则不执行任何操作
重写WndProc
或DefaultWndProc
并为每个消息简单地返回true实质上会“关闭” ProcessMessages
,但是这样做是不安全的,因为控件可能需要处理一个或多个消息才能正常运行。
无法关闭ProcessMessages
(无需重写VCL代码进行消息处理),因为这是VCL表单的消息循环构造方式的一部分。