在Vista Aero中禁用进度条动画

9
我正在使用Delphi 2009 VCL TProgressBar作为空/满计量表。在启用Aero主题的Vista上,这个控件有一个与之相关联的动画,这对于一个计量表来说是令人恼火和不合适的。是否有任何方法可以禁用此功能(而不是调整用户的主题设置!)以防止该控件上的动画?为了澄清,我想要的基本上与Windows资源管理器中的“磁盘空间使用情况”仪表盘完全相同。没有动画,但仍带有漂亮的边框和阴影效果。更新:我了解到我需要一个“仪表”,而不是真正的进度条。如何使用标准的Windows进度条控件实现一个主题化的仪表?
5个回答

11
根据 Vista UI 进度条指南,你不应该使用 TProgressBar 来实现此类功能,其中指出:

只有在进度时才使用进度条。使用仪表来表示与进度无关的百分比。

有许多第三方组件(例如 Abakus VCL)旨在用于流程自动化应用程序等,也许您可以使用其中一个控件代替 TProgressBar?

2
明白 - 但它说:“米:这种模式不是进度条,但它是使用进度条控件实现的。”我如何使用进度条控件实施这样的“米”?至于Abakus组件,我的应用程序应该看起来像是在过去的十年左右设计的。 - Roddy
我不知道如何实现表计,并且没有Vista来检查。你能运行Spy++,看看这些表计控件设置的Windows风格标志吗?Spy++附带于MS Visual C++中。如果你没有它,请搜索“spy++ 免费软件”。 - mghie
关于Abakus - 我明白你的意思;-)如果您需要在Vista中使仪表看起来好看,最好找到一个通用控件的样式。但我在平台SDK中没有找到任何东西...请查看http://msdn.microsoft.com/en-us/library/cc656530(VS.85).aspx以获取可用文档。 - mghie
1
关于那些“meter”控件,我没有找到其他信息。当然,还有另一种选择,就是创建一个TGraphicControl。可以在http://www.codeproject.com/KB/cpp/VistaProgressBar.aspx上找到使用GDI+绘制Vista风格进度条的代码示例。 - mghie
1
+1 因为我认为这是正确的答案。电池不会耗尽或充电得足够快,以至于动画不可见。汽车燃油不会燃烧或加满油,也不会快到使动画变得重要。我唯一能想象的例子是 CPU 负载或风扇速度指示器。最终,我认为你可能会被迫使用自定义控件(应用 UxTheme API 绘图)。 - Ian Boyd

10

您可以尝试为该控件关闭主题;

SetWindowTheme(ProgressBar.Handle, ' ', ' ');

+1,因为这个答案看起来很有用 - 尽管我不知道它是否有效,或者是否是有意禁用通用控件主题的正确方法。 - Ian Boyd
我已经测试过了,它可以正常工作,该函数在UxTheme库中(http://msdn.microsoft.com/en-us/library/bb759827(VS.85).aspx)。 - Remus Rigo
1
是的和不是的。它会关闭动画,但也会关闭控件的所有主题,因此您只能得到一个没有边框、阴影或任何其他UI美化的纯蓝色框。我的目标是得到与资源管理器中的“磁盘空间已用”仪表盘匹配的东西。 - Roddy

3

1

0

请看一下这个论坛帖子。这是我找到的唯一有希望的链接,第一个帖子提到了不同的进度条状态,因此更改平滑、状态和样式属性可能没有帮助。

如果最后一个帖子中的提示确实是以米为单位绘制进度条的唯一方法,那么您最好的选择是创建TProgressBar的派生类,覆盖WM_PAINT处理程序,检查Vista和启用的主题,并在这种情况下使用UxTheme中的函数来绘制控件的不同部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接