如何在VCL中更改TCheckBox的背景颜色?

问题描述 投票:0回答:3

我试图通过

TCheckBox
属性更改 VCL 中
Color
的背景颜色,但它对我不起作用。

我没有启用任何样式。我也尝试过使用这些属性并更改诸如

ParentFont
ParentColor
StyledElements
等属性……但没有任何效果。

我只是无法更改

TCheckBox
上的背景颜色。

为了使

Color
属性发挥作用或使背景颜色发生变化和不同,需要执行哪些必要的属性和/或操作?

delphi vcl delphi-12-athens tcheckbox
3个回答
1
投票

最近的 Windows 版本(或更好的 ComCtr32.dll)不支持为复选框着色。实现这一目标的唯一方法是在 Manifest 下的项目选项中禁用 Runtime Themes,但这还有很多其他缺点。你基本上是在模仿 Windows XP 之前的外观。


0
投票

如果视觉设计对您的项目很重要,那么是时候创建自定义样式了。单一样式只能有一种复选框绘制颜色,但您的应用程序可以有多种样式。所以不同的复选框将使用不同的样式,这样就会有不同的颜色。这样做是这样的:

  1. 在项目选项 > 外观中启用多种样式
  2. 选择其中之一作为默认值,但请记住,选择标准 Windows 样式将禁用样式引擎
  3. 在表单上将所需控件的 StyleName 属性设置为非默认样式

-2
投票

就像@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
© www.soinside.com 2019 - 2024. All rights reserved.