我遇到了一个问题,我通常无法使用其属性 ToolBar.Color
更改 TToolBar
的背景颜色(例如 clwhite
) >。我对 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
,因此无论工具栏父级的颜色是什么,都会发光。
如果您查看 VCL 源代码,您会发现 TToolbar 并不进行自己的绘图;它是由 TToolbar 绘制的。它是 ComCtl32.dll
中 ToolbarWindow32
Win32 公共(public)控件的包装。
这是进行绘图的代码。
当 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
属性。
您已经找到了解决方法:
设置具有相同
GradientEndColor
和GradientStartColor
的渐变,或者将工具栏放在另一个控件(例如 TPanel)上并更改该控件的颜色,因为工具栏是透明的,父颜色会透过。
您需要将面板的BevelInner
/BevelOuter
设置为bvNone
,或者启用 VCL 样式并遭受与该公司复选框反模式相关的所有问题。
关于delphi - 更改工具栏背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345268/