Delphi:使用自定义VCL样式更新标题时会出现严重闪烁

Delphi:使用自定义VCL样式更新标题时会出现严重闪烁,delphi,delphi-10-seattle,vcl-styles,Delphi,Delphi 10 Seattle,Vcl Styles,使用Delphi Seattle,使用一个按钮和一个标签获取以下代码,并将表单的DoubleBuffering设置为True procedure TForm1.Button1Click(Sender: TObject); Var a: Integer; s: Int64; begin s := GetTickCount; for a := 1 to 10000 do begin Label1.Caption := 'Testing '+IntToStr(a); A

使用Delphi Seattle,使用一个按钮和一个标签获取以下代码,并将表单的DoubleBuffering设置为True

procedure TForm1.Button1Click(Sender: TObject);
Var a: Integer;
    s: Int64;
begin
  s := GetTickCount;
  for a := 1 to 10000 do begin
    Label1.Caption := 'Testing '+IntToStr(a);
    Application.ProcessMessages;
  end;
  s := GetTickCount - s;
  caption := inttostr(s);
end;
除了剧烈的闪烁外,如果使用VCL样式,循环需要更长的时间。 其他控件也会发生同样的情况,例如TGroupBox、TStatusBar。相反,更新表单标题不会闪烁,但速度要慢得多

我怎样才能修复闪烁


评论更新:


代码只是为了方便地重现问题。我遇到的问题是,在大型应用程序的一部分中,执行了文件下载,并在触发数据接收事件时更新了进度,即“12.05 MB/200 MB完成”。使用自定义VCL样式时,性能下降(和闪烁)非常糟糕,因此使用默认的“Windows”样式时下载速度更快。

大量重复:甚至没有一个重复,请再次完整阅读问题。使用
TStaticText
而不是
TLabel
@DavidHeffernan,true。双缓冲很少是闪烁的解决方案,正如您所说,一般来说,处理闪烁可能有点复杂。这里的示例并非取自实际应用程序。那么,性能怎么会成为问题呢?在不知道真正问题的情况下,这个问题怎么能得到答案呢。。。下载时不要尝试更新每个数据包上的显示(在任何情况下都可能无法读取)。相反,每1/2秒只更新一次显示。大量重复:甚至没有一个重复,请再次完整阅读问题。使用
TStaticText
而不是
TLabel
@DavidHeffernan,true。双缓冲很少是闪烁的解决方案,正如您所说,一般来说,处理闪烁可能有点复杂。这里的示例并非取自实际应用程序。那么,性能怎么会成为问题呢?在不知道真正问题的情况下,这个问题怎么能得到答案呢。。。下载时不要尝试更新每个数据包上的显示(在任何情况下都可能无法读取)。而是每1/2秒更新一次显示。