delphi - 停止标签标题闪烁

标签 delphi delphi-7 flicker

我有一个标签,用

指示文件大小
FormatFloat('##.## KB',BytesIn/OneKB);

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

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

标题大约每 1 KB 更新一次,并且闪烁很剧烈。

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

最佳答案

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

我处理标签闪烁的技巧是使用 TStaticText 而不是 TLabel。这是一个窗口控件,是 Windows STATIC 控件的包装器,根据我的经验,它在 TLabel 会出现的情况下总是不会闪烁。

正如其他人提到的,限制更新率是一个好主意,并且无论闪烁如何都是明智的。无需花费比人眼吸收速度更快的资源来更新 UI。在我看来,对于下载进度之类的内容,您实际上不需要超过 5Hz。这很可能是问题的根本原因,如果限制更新速率可以解决问题,那么您可以坚持使用 TLabel

我在这里的回答有一些更通用的防闪烁技巧:TLabel and TGroupbox Captions Flicker on Resize .

关于delphi - 停止标签标题闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17578863/

相关文章:

delphi - 对 Delphi TMemo 中的每一行做一些事情

delphi - 使用 Delphi 中的打印机单元

Android: ListView 闪烁效果。关于如何摆脱这个的任何提示?

delphi - 项目构建配置的上下文菜单中的 "Make"和 "Build"有什么区别?

Delphi 7,使用 UNC 选择目录

java - 重绘时图像闪烁()

iOS CAKeyFrameAnimation 动画结束时缩放闪烁

azure - 用于访问 Azure 上的公共(public) RESTServer 应用程序的请求 OAuth2 参数

xml - delphi xmlchildnode 从父节点获取属性

mysql - Delphi - 在运行时创建 MySQL 数据库