gpt4 book ai didi

delphi - 在不调用 Application.ProcessMessages 的情况下获取窗口刷新(等)?

转载 作者:行者123 更新时间:2023-12-03 14:36:49 25 4
gpt4 key购买 nike

我这里有一个遗留应用程序,它有一些“耗时”的循环,这些循环由于各种用户交互而被触发。耗时的代码定期更新屏幕上的某些内容以及进度信息(通常是标签),然后,似乎是为了说服视觉刷新立即发生,代码调用 Application.ProcessMessages(啊!)。

我们现在都知道这会给 GUI 应用程序带来什么样的麻烦(出于慈善目的,那时还是一个更天真无邪的时代),而且我们发现,确实如鸡蛋一样,我们时不时地让用户实现对于该程序来说这是不可能的,因为他们在程序“忙”时单击控件。

在不接受其他事件/消息等的情况下定期刷新表单视觉效果的最佳方式是什么?

我的想法是:
- 在执行任何耗时的操作之前禁用所有控件,并保留“...ProcessMessages”调用以“强制”刷新,或者
- 找到另一种定期刷新控件的方法

我可以做前者,但这让我想知道 - 有更好的解决方案吗?

遗留的示例代码;

i:=0;while FJobToBeDone dobegin  DoStepOfLoop;  inc(i);  if i mod 100 = 0 then  begin    UpdateLabelsEtc;    Application.ProcessMessages;  end;end;

我已经能听到你们在后面晕倒的声音。 :-)

最佳答案

如果您在更改属性后对控件调用Update(),您将强制它们重绘。另一种方法是调用 Repaint() 而不是 Refresh(),这意味着调用 Update()

您可能还需要在父控件或框架上调用 Update(),但这可以让您完全消除 ProcessMessages() 调用。

关于delphi - 在不调用 Application.ProcessMessages 的情况下获取窗口刷新(等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142254/

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