我试图通过
TCheckBox
属性更改 VCL 中 Color
的背景颜色,但它对我不起作用。
我没有启用任何样式。我也尝试过使用这些属性并更改诸如
ParentFont
、ParentColor
、StyledElements
等属性……但没有任何效果。
我只是无法更改
TCheckBox
上的背景颜色。
为了使
Color
属性发挥作用或使背景颜色发生变化和不同,需要执行哪些必要的属性和/或操作?
最近的 Windows 版本(或更好的 ComCtr32.dll)不支持为复选框着色。实现这一目标的唯一方法是在 Manifest 下的项目选项中禁用 Runtime Themes,但这还有很多其他缺点。你基本上是在模仿 Windows XP 之前的外观。
如果视觉设计对您的项目很重要,那么是时候创建自定义样式了。单一样式只能有一种复选框绘制颜色,但您的应用程序可以有多种样式。所以不同的复选框将使用不同的样式,这样就会有不同的颜色。这样做是这样的:
就像@Uwe指出的:
最近的 Windows 版本(或更好的 ComCtr32.dll)不支持为复选框着色
但我想为此添加一个解决方案,至少可以让您在最新版本的 Windows 上为
TCheckBox
提供不同的背景颜色。
如果您需要为
TCheckBox
设置不同的背景颜色,则可以将其放置在 TPanel
组件内,并使用 TPanel
显示 TCheckBox
的背景颜色。
然后开始设置以下属性:
Align
到 alClient
上的
TCheckBox
BevelOuter
到 bvNone
上的
TPanel
然后您只需在
Color
上设置 TPanel
属性,您就会得到一个具有不同背景颜色的 TCheckBox
:
这是上面示例的完整 DFM 代码:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 441
ClientWidth = 624
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
TextHeight = 15
object Panel1: TPanel
Left = 24
Top = 40
Width = 153
Height = 25
BevelOuter = bvNone
Color = clSkyBlue
ParentBackground = False
TabOrder = 0
object CheckBox1: TCheckBox
AlignWithMargins = True
Left = 5
Top = 3
Width = 145
Height = 19
Margins.Left = 5
Align = alClient
Caption = 'CheckBox1'
TabOrder = 0
ExplicitLeft = -27
ExplicitTop = 19
end
end
object Panel2: TPanel
Left = 24
Top = 70
Width = 153
Height = 25
BevelOuter = bvNone
Color = clMoneyGreen
ParentBackground = False
TabOrder = 1
object CheckBox2: TCheckBox
AlignWithMargins = True
Left = 5
Top = 3
Width = 145
Height = 19
Margins.Left = 5
Align = alClient
Caption = 'CheckBox2'
TabOrder = 0
end
end
end