delphi - 更改工具栏背景颜色

标签 delphi common-controls

我遇到了一个问题,我通常无法使用其属性 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.dllToolbarWindow32 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 属性。
您已经找到了解决方法:

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

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

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

关于delphi - 更改工具栏背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345268/

相关文章:

windows - 在 CHOOSECOLOR 对话框中更改字体

windows - 如何使 COM 对象的方法不在主线程中运行

delphi - 在中间添加新的常量时,如何递增顺序的常量值

delphi - Delphi 函数中变量可能尚未初始化

visual-c++ - 带颜色的进度条和带有通用控件的边框

delphi - 带有 alpha 混合图标的图像列表失去透明度

windows - 如何在 EditBox 中切换自动换行

delphi - 如何将滚动条位置转换为 Gamma 校正?

delphi - Lazarus 应用程序中的启动画面问题