加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi中防止ProcessMessages

发布时间:2020-12-15 09:35:37 所属栏目:大数据 来源:网络整理
导读:Application.ProcessMessages命令是众所周知的,我在长进程中使用它来确保我的程序不会占用计算机. 但我有一个相当快速的处理集,我在缓冲视图到文件.在缓冲过程期间,可以发送一些系统消息(例如,重绘或滚动条移动或其他事件).我希望防止这些被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表单的消息循环构建方式的一部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读