更改TToolBar背景颜色

Tri*_*ber 3 delphi common-controls

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

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

ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite
Run Code Online (Sandbox Code Playgroud)

2)将TToolBarTPanel使用以下设置.

Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 7

默认情况下,TToolbar忽略其Color属性.
此外,默认情况下Transparent属性是true,因此无论工具栏的父级的颜色是什么颜色都会闪耀.

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

同样TPageControl/TTabSheet不会发布其Color propery.
通过ComCtl32.dll导入的所有控件都VCL.ComCtrls受到这些不一致的影响.

简而言之
,没有什么可以让TToolbar尊重它的Color财产.
您已经找到了解决方法:

  1. 设置具有相同GradientEndColor和的渐变GradientStartColor.

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

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