更改工具栏背景颜色

Change TToolBar background color

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

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

默认情况下,TToolbar 会忽略其 Color 属性。
同样默认情况下 Transparent 属性 是 true,因此无论 Toolbar 父级的颜色是什么都会发光。

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

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

简而言之
您无法使 TToolbar 尊重其 Color 属性.
您已经找到解决方法:

  1. 设置GradientEndColorGradientStartColor相同的渐变,或者

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

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