我有一个标签,用
表示文件大小FormatFloat('##.## KB',BytesIn/OneKB);
当文件都低于2MB时,一切正常。现在我有时使用2GB及以上的文件。
FormatFloat('##.##### MB',BytesIn/OneMB);
标题正在每1 KB更新一次,闪烁非常激烈。
有什么方法可以阻止或最小化它?
答案 0 :(得分:10)
Delphi TLabel
确实可以成为一只怪物。很多人会推荐双缓冲,但我不喜欢这样。它带来了其他问题。特别是,如果您使用主题,则双缓冲可能会干扰主题渲染。
我处理标签闪烁的技巧是使用TStaticText
而不是TLabel
。这是一个窗口控件,是围绕Windows STATIC
控件的包装器,根据我的经验,它总是不会在TLabel
的情况下闪烁。
正如其他人所提到的,限制更新率是一个合理的想法,无论闪烁如何都是明智的。没有必要花费资源来更新UI,这比人眼可以吸收的更快。对于类似下载进度的东西,在我的视图中你不应该需要超过5Hz。这可能是您的问题的根本原因,如果限制更新率解决了问题,那么您可以坚持使用TLabel
。
我的回答有一些更常见的反闪烁提示:TLabel and TGroupbox Captions Flicker on Resize。