【发布时间】:2021-02-10 23:37:09
【问题描述】:
我在 Delphi 应用程序中执行一些 HTTP 请求时显示“请稍候”表单。 “请稍候”对话框在关闭时调用 Application.ProcessMessages。
这似乎有一些不良后果。例如,如果用户单击“请稍候”对话框后面的表单中的按钮,则这些单击似乎会添加到事件队列中并在执行 Application.ProcessMessages 时进行处理,即使在显示对话框之前禁用按钮并启用也是如此隐藏后再次。
所以我想知道是否有任何方法可以在显示“请稍候”对话框时完全忽略整个应用程序的鼠标单击事件?我发现我可以将整个表单的Enabled 设置为False 以防止在该特定表单上发生鼠标单击事件,但是当Application.ProcessMessages 执行时,其他表单仍会收到鼠标单击事件。
有没有标准的方法来做到这一点?类似(假设的伪代码)Application.Enabled := FALSE 或 Application.DiscardMessages?
修改“请稍候”对话框的行为(删除对Application.ProcessMessages 的调用)是我无法控制的——它是在不同地方使用的标准公司范围的对话框。
【问题讨论】:
-
为了其他读者的利益:不要使用
Application.ProcessMessages。正确的解决方案是在单独的线程中完成慢速任务。既然我已经说过了,让我们专注于您的特定问题。我个人非常喜欢的一种应用程序设计方法是将TActionList用于应用程序中的所有操作(使用菜单、工具栏按钮、热键或按钮的任意组合访问)。如果使用这样的设计,只需要禁用动作列表即可。 -
您显然不想完全停止对消息的响应,因为这会使您的应用程序无响应,无法移动/调整大小,并且还会使 Abort 按钮我确定您在“请稍候”对话框中停止工作。
-
你的对话框窗口是模态窗口吗?
-
听起来你真正的问题不是你想的那样。您真正的问题似乎是您没有使用正确的模式对话框,该对话框会禁用其他顶级窗口。
标签: delphi