TToolBar在非主题Windows上绘制错误

时间:2011-07-20 09:34:25

标签: delphi toolbar

最近我注意到我们的一个应用程序在非主题Windows上绘制错误。

工具栏是由嵌套在TToolbar中的TSpeedButtons构建的,而TToolbar又存在于页面控件中。

在主题Windows上,一切看起来都不错。嗯,不好,但还可以。

TToolbar on themed Windows

然而,在非主题的Windows上,按钮内会出现奇怪的垂直线条。

Toolbar on non-themed Windows

我已经四处搜索,但找不到任何关于此类问题的报告。 (很可能只是我的搜索功夫糟透了。)有没有人知道这个问题的描述,或者更好的是,修复?

2 个答案:

答案 0 :(得分:6)

TToolbar并非旨在保留TSpeedButtons。它被设计为保持TToolButtons,它不仅可以放在TToolBar上,而且可以专门编写以在条形图上正确运行。

您遇到的问题(尤其是分隔符按照它们的方式绘制)是因为您使用了不兼容的TSpeedButton并将它们与TToolButton分隔符分开。 TSpeedButtonTPanel上运行良好,而IIRC的设计目的仅限于MS在ComCtl中提供TToolBar/TToolButton对之前的情况。

包含TToolBar TToolButtonsTPanel TSpeedButtons的快速测试应用程序应该会看到这是否解决了问题。

编辑:您的评论不太正确。 :)

enter image description here

TToolBar.AllowTextButtons设置为True,然后将您希望更宽的按钮设置为样式tbsTextButton。如您所见,我使用了普通按钮,分隔符,文本按钮(带文本和图像),分隔符和另一个普通按钮。

答案 1 :(得分:2)

正如TOndrej在评论中所说,当TSpeedButton.Flat.Transparent都设置为True时会发生这种情况。大卫发现,TToolbar必须将.Flat设置为True才能发生问题。

不需要更改VCL源代码的解决方法是将.Transparent设置为False。