5

我有一个标签,它指示文件大小

FormatFloat('##.## KB',BytesIn/OneKB);

当文件全部低于 2MB 时,一切正常。现在我有时会使用 2GB 以上的文件。

FormatFloat('##.##### MB',BytesIn/OneMB);

Caption 大约每 1 KB 更新一次,并且闪烁很激烈。

有什么办法可以阻止或最小化它吗?

4

1 回答 1

12

DelphiTLabel确实可以是一个闪烁的野兽。很多人会推荐双缓冲,但我不喜欢这样。它带来了其他问题。特别是,如果您使用主题,则双缓冲可能会干扰主题渲染。

我处理标签闪烁的技巧是使用 aTStaticText而不是 a TLabel。这是一个窗口控件,是 WindowsSTATIC控件的一个包装器,根据我的经验,它在任何情况下都不会闪烁TLabel

正如其他人所提到的,限制更新率是一个合理的想法,并且不管闪烁是明智的。无需花费比人眼所能吸收的速度更快的资源来更新 UI。在我看来,对于下载进度之类的东西,你真的不需要超过 5Hz。这很可能是您的问题的根本原因,如果限制更新率解决了问题,那么您可以坚持使用TLabel.

我在这里的回答有一些更通用的防闪烁提示:TLabel 和 TGroupbox Captions Flicker on Resize

于 2013-07-10T19:06:38.903 回答