2016-09-06 256 views
2

我遇到了一个问题,我无法正常更改背景颜色(例如clwhiteTToolBar及其属性ToolBar.Color。我对Delphi不是很有经验,我发现了两种可能的解决方案,但我仍然想知道,如何正确地改变它,或者为什么它不可能。更改TToolBar背景颜色

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 
+0

'ParentColor'为false? –

+0

@LURD当然,当你改变'Color'属性时,它会自动设置为False。 – Triber

+1

主题控件是主题。你不能确定他们的颜色。主题确实如此。如果你不喜欢,请禁用主题。 –

回答

6

默认情况下,TToolbar忽略其Color属性。
默认情况下,Transparent属性为true,因此无论工具栏父级的颜色是否会透过。

如果你看看VCL的源代码,你会发现TToolbar不会自己绘制;它是ComCtl32.dll中的ToolbarWindow32 Win32公共控件的封装。
这是执行绘图的代码。
当Windows XP引入时,微软添加了UI主题,Borland通过VCL.Themes.TStyleManager支持。
您可以通过样式管理器改变公共控件的外观:Project -> Options -> Appearance -> Custom Styles,但它很难知道什么样的影响这,因为IDE不显示的结果(你可以在运行时看到它),你只能选择有限的相当奇怪的主题列表;该功能也是越野车。

TPageControl/TTabSheet也是这样,它不会发布它的Color propery。
所有通过ComCtl32.dll导入并由VCL.ComCtrls执行的控件都会受到这些不一致的影响。

总之
你没有什么可以做,使TToolbar尊重其Color财产。
你已经找到了解决办法:

  1. 设置具有相同GradientEndColorGradientStartColor一个梯度。

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

  3. 启用VCL样式,并且遇到与该公司tickbox反模式有关的所有问题。