微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Delphi中防止ProcessMessages

Application.ProcessMessages命令是众所周知的,我在长进程中使用它来确保我的程序不会占用计算机.

我有一个相当快速的处理集,我在缓冲视图到文件.在缓冲过程期间,可以发送一些系统消息(例如,重绘或滚动条移动或其他事件).我希望防止这些被ProcessMessages处理,直到我的缓冲完成.

有没有办法:

>防止Application.ProcessMessages直到我的程序完成,或者
>捕获在我的过程中生成的所有消息,并且不会释放它们直到过程结束.

解决方法

允许ProcessMessages继续,即使它发送您不想要的消息也不应被归类为有问题.通过一些代码重构,您可以将缓冲方法移动到单独的线程中并从那里开始.

如果您尝试将控件的“可视内容”复制到文件中,

>查看WM_PRINT(xxx)消息,该消息允许子控件将自己绘制为位图
>尝试LockWindowUpdate Win32 API方法调用,该调用关闭所有绘制消息到该控件
>如果需要,覆盖控件类甚至父类的WndProc / DefaultWndProc方法,并为发送的每条消息返回“true”
>覆盖控件类甚至父级的特定控制方法(例如“滚动条移动”,“OnPaint”,“OnPaintBackground”等),如果缓冲正在进行中,则无需执行任何操作

覆盖WndProc或DefaultWndProc并简单地为每个消息返回true实际上“关闭”ProcessMessages但是这样做是不安全的,因为控件可能需要处理一个或多个消息才能正常工作.

无法关闭ProcessMessages(不重写用于消息处理的VCL代码),因为它是VCL表单的消息循环构建方式的一部分.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐