2011-03-09 76 views
2

我希望只读复选框变灰,但在Windows(XP及以上版本)中显示其选中/未选中状态,但我有一些问题。如何使用Delphi在Windows下显示“灰显”只读复选框主题

注意 - 关于'只读':看起来Delphi的TCheckBox甚至没有只读选项,通过将它放在TPanel上并禁用该选项,问题仍然有效,如何获得呈灰色的只读复选框或显示其状态的非活动复选框。

已禁用的复选框呈灰色,但这些复选框不显示已选中或未选中的状态。只读复选框可以,但是当Windows以它们为主题时,它们看起来就像普通的可编辑复选框。只读框不能更改其值,但它看起来可以。

在关闭主题(即在经典模式下)的XP中,它可以正常工作。

由于大型应用程序或其开发时间/现金比率过于笨拙/不专业,因此无法接受的解决方案包括: - 手动灰化文本并显示复选框状态图像。 - 禁用复选框上的主题,因为没有它们的外观很难看。

http://i51.tinypic.com/263g128.pnghttp://i53.tinypic.com/m7co4x.png

虽然只读和可编辑复选框: - - 使用自定义复选框

问题的截图这三个检查复选框,一个残疾人,一个只和一个正常的阅读看起来不同,这是因为第一张图片中的可编辑框具有焦点。如果只读对象与焦点对象相同,则只读对象看起来相同,如第二张图中所示。

+2

如果通过* inactive *您的意思是* disabled *,我cann在XP上复制您的问题,禁用复选框显示其检查状态。而我无法找到该控件的*只读*属性。 – 2011-03-09 02:49:21

+0

对不起,是的,你是正确的。通过激活和不激活我的意思是启用和禁用。 – Anonymous 2011-03-09 03:04:21

+0

进一步的调查显示,这并不像我想的那样。德尔福的TCheckBox,正如你所说的,甚至没有只读选项,这已被伪装成将其放在TPanel上,并禁用该选项......我必须在开发人员进一步研究之前,正确运行复选框。 – Anonymous 2011-03-09 03:14:56

回答

0

Anonymous已要求提供代码来演示禁用的复选框,以显示其已检查的状态。

program Project28; 

uses 
    Forms, StdCtrls; 

var 
    Form: TForm; 

procedure Initialise; 
var 
    cb1, cb2: TCheckBox; 
begin 
    cb1 := TCheckBox.Create(Form); 
    cb2 := TCheckBox.Create(Form); 
    cb1.Parent := Form; 
    cb2.Parent := Form; 
    cb1.Top := 0; 
    cb2.Top := 16; 
    cb1.Enabled := False; 
    cb2.Enabled := False; 
    cb1.Checked := False; 
    cb2.Checked := True; 
    cb1.Caption := 'Checkbox1'; 
    cb2.Caption := 'Checkbox2'; 
end; 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm, Form); 
    Initialise; 
    Application.Run; 
end. 

enter image description here

+0

“你的问题是弄清楚它在代码中的作用,它阻止它们这么做!” 你是对的,我打算这么做:) 干杯! – Anonymous 2011-03-09 21:26:15

1

复选框与主题显示选中标记时禁用,因为你可以在这个截图中看到:

enter image description here

用于创建此DFM的是这样的:

object Form2: TForm2 
    Left = 0 
    Top = 0 
    Caption = 'Form2' 
    ClientHeight = 337 
    ClientWidth = 635 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object CheckBox1: TCheckBox 
    Left = 8 
    Top = 8 
    Width = 153 
    Height = 17 
    Caption = 'Disabled an checked' 
    Checked = True 
    Enabled = False 
    State = cbChecked 
    TabOrder = 0 
    end 
    object CheckBox2: TCheckBox 
    Left = 8 
    Top = 31 
    Width = 153 
    Height = 17 
    Caption = 'Enabled and checked' 
    Checked = True 
    State = cbChecked 
    TabOrder = 1 
    end 
    object CheckBox3: TCheckBox 
    Left = 8 
    Top = 54 
    Width = 153 
    Height = 17 
    Caption = 'Disabled an un-checked' 
    Enabled = False 
    TabOrder = 2 
    end 
    object CheckBox4: TCheckBox 
    Left = 8 
    Top = 77 
    Width = 153 
    Height = 17 
    Caption = 'Enabled and un-checked' 
    TabOrder = 3 
    end 
end