我有一个标签,它指示文件大小
FormatFloat('##.## KB',BytesIn/OneKB);
当文件全部低于 2MB 时,一切正常。现在我有时会使用 2GB 以上的文件。
FormatFloat('##.##### MB',BytesIn/OneMB);
Caption 大约每 1 KB 更新一次,并且闪烁很激烈。
有什么办法可以阻止或最小化它吗?
DelphiTLabel
确实可以是一个闪烁的野兽。很多人会推荐双缓冲,但我不喜欢这样。它带来了其他问题。特别是,如果您使用主题,则双缓冲可能会干扰主题渲染。
我处理标签闪烁的技巧是使用 aTStaticText
而不是 a TLabel
。这是一个窗口控件,是 WindowsSTATIC
控件的一个包装器,根据我的经验,它在任何情况下都不会闪烁TLabel
。
正如其他人所提到的,限制更新率是一个合理的想法,并且不管闪烁是明智的。无需花费比人眼所能吸收的速度更快的资源来更新 UI。在我看来,对于下载进度之类的东西,你真的不需要超过 5Hz。这很可能是您的问题的根本原因,如果限制更新率解决了问题,那么您可以坚持使用TLabel
.
我在这里的回答有一些更通用的防闪烁提示:TLabel 和 TGroupbox Captions Flicker on Resize。