我遇到了一个问题,我无法正常更改clwhite
的背景颜色(例如TToolBar
)及其属性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
答案 0 :(得分:7)
默认情况下,TToolbar
会忽略其Color
属性
默认情况下,Transparent
属性为true
,因此无论工具栏的父级颜色是什么,都会闪现。
如果查看VCL源代码,您会发现TToolbar没有自己的绘图;它是ToolbarWindow32
中ComCtl32.dll
Win32公共控件的包装器
这是绘图的代码
当引入Windows XP时,Microsoft添加了UI主题,Borland通过VCL.Themes.TStyleManager
支持了这一点
您可以通过样式管理器更改公共控件的外观:Project -> Options -> Appearance -> Custom Styles
,但很难知道它有什么影响,因为IDE不显示结果(您可以在运行时看到它)而且您只能选择有限的奇怪主题列表;这个功能也是错误的。
TPageControl/TTabSheet
同样适用于未发布其Color属性的内容
通过ComCtl32.dll导入并由VCL.ComCtrls
实现的所有控件都会受到这些不一致的影响。
简而言之
没有什么可以让TToolbar尊重其Color
属性
您已经找到了解决方法:
设置具有相同GradientEndColor
和GradientStartColor
的渐变。
将工具栏放在另一个控件(例如TPanel)上并更改该控件的颜色,因为工具栏是透明的,父颜色会透过。
您需要将小组BevelInner
/ BevelOuter
设置为bvNone
。
启用VCL样式并遇到与该公司复选框反模式相关的所有问题。