6

我遇到了一个问题,我通常无法使用其属性更改背景颜色(例如clwhite)。我在德尔福方面不是很有经验,我找到了两种可能的解决方案,但我仍然想知道,如何以正确的方式改变它,或者为什么它不可能。TToolBarToolBar.Color

1)将样式更改为渐变,但它也更改了按钮的基本动画。

ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite

2)使用以下设置放入TToolBar内部。TPanel

Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
4

1 回答 1

11

默认情况下 aTToolbar忽略它的Color属性。
同样默认情况下,该Transparent属性是true,因此无论工具栏父级的颜色是什么,都会发光。

如果您查看 VCL 源代码,您会发现 TToolbar 不进行自己的绘图;它是ToolbarWindow32Win32 通用控件的包装器ComCtl32.dll
这是进行绘图的代码。
当引入 Windows XP 时,Microsoft 添加了 UI 主题,Borland 通过VCL.Themes.TStyleManager.
您可以通过样式管理器更改 Common Controls 的外观:Project -> Options -> Appearance -> Custom Styles,但是很难知道这有什么影响,因为 IDE 不显示结果(您可以在运行时看到)并且您只能从有限的列表中选择相当奇怪的主题;该功能也有问题。

TPageControl/TTabSheet不发布其 Color 属性的情况也是如此。
所有通过 ComCtl32.dll 导入并由其实现的控件都存在VCL.ComCtrls这些不一致问题。

简而言之
,您无法使 TToolbar 尊重其Color属性。
您已经找到了解决方法,或者:

  1. GradientEndColor使用相同的and设置渐变GradientStartColor,或

  2. 将工具栏放在另一个控件(例如 TPanel)上并更改该控件的颜色,因为工具栏是透明的,父颜色会透出。
    您需要将面板的BevelInner/设置BevelOuterbvNone,或

  3. 启用 VCL 样式并遭受与该公司复选框反模式相关的所有问题。

于 2016-09-06T12:23:23.073 回答