如何让TProgressBar停止滞后?

Mas*_*ler 4 delphi delphi-2009 windows-vista

我有一个运行一系列操作的应用程序,我正在尝试使用TProgressBar来跟踪正在发生的事情.我设置了许多步骤,并调用.StepIt来增加进度条.

问题是,它没有很好地跟上.它似乎喜欢逐渐滑向它,而不是直接跳到正确的位置.如果它是你所追求的眼睛糖果,这一切都很好,但是当我试图准确地表达我的例程进展时,这使得它似乎总是落后于真实状态.如何关闭"功能"?

我只注意到在Windows Vista下发生这种情况.不确定它是否也在XP上进行,因为当我在XP上测试它时,过程进行得更快,而且过快.:P但这可能是也可能不是特定于Vista的.无论哪种方式,它都让我疯狂.有谁知道如何修理它?

Fra*_*ois 6

如果您不介意将进度条设为黄色而不是绿色,我会有一个快速但部分且不优雅的解决方案:

  ProgressBar1.SmoothReverse := True;
  ProgressBar1.State := pbsPaused; // for yellow or pbsError for red
Run Code Online (Sandbox Code Playgroud)

或者,如果你不介意失去远景/主题外观并回到平坦的蓝色外观:

  UxTheme.SetWindowTheme(ProgressBar1.Handle, ' ', ' ');
Run Code Online (Sandbox Code Playgroud)

根据微软的真正"问题"是,你试图将ProgressBar"变形"为他们声称不是的仪表.

你也可以尝试自己绘制;-)

  • 有趣的评论"真正的问题".微软在哪里这么说? (2认同)

小智 5

Windows7上的问题相同!!

但答案已经在一篇较旧的帖子中了:

如果tou使进度条向后退一步就没有延迟!!! 所以我实现了这个.....(并获得即时更新)

if(progress < ProgressBar.Max)
then
begin
  ProgressBar.Position := progress+1;
  ProgressBar.Position := progress; //This will set Progress backwards and give an instant update....
end
else
begin //cannot set position beyond max...
  ProgressBar.Max      := progress + 1;
  ProgressBar.Position := progress + 1;
  ProgressBar.Max      := progress; //This will also set Progress backwards also so instant update........
end;
Run Code Online (Sandbox Code Playgroud)