gpt4 book ai didi

delphi - 如何在 Delphi 中防止 ProcessMessages

转载 作者:行者123 更新时间:2023-12-03 15:20:42 24 4
gpt4 key购买 nike

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

但是我有一组相当快的处理,我将 View 缓冲到文件中。在缓冲过程中,可能会发送一些系统消息(例如重绘或滚动条移动或其他事件)。我想阻止这些由 ProcessMessages 处理,直到我的缓冲完成。

有没有办法:

  1. 阻止 Application.ProcessMessages,直到我的过程完成,或者

  2. 捕获我的过程中生成的所有消息,直到过程结束才释放它们。

最佳答案

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

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

  • 查看 WM_PRINT(xxx) 消息,它允许子控件将自己绘制到位图中
  • 尝试 LockWindowUpdate Win32 API 方法调用,这将关闭发送到该控件的所有绘制消息
  • 如果需要,可以重写控件类甚至父类上的 WndProc/DefaultWndProc 方法,并为每条发送的消息返回“true”
  • 覆盖控件类甚至父类上的特定控件方法(例如“滚动条移动”、“OnPaint”、“OnPaintBackground”等),只需执行以下操作即可如果您的缓冲正在进行中,则什么也不做

覆盖 WndProcDefaultWndProc 并简单地为每条消息返回 true 本质上“关闭”ProcessMessages 但是这样做并不安全,因为控件可能需要处理一条或多条消息才能正常运行。

关闭ProcessMessages是不可能的(在不重写消息处理的VCL代码的情况下),因为它是VCL表单消息循环构造的一部分。

关于delphi - 如何在 Delphi 中防止 ProcessMessages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1251678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com