2011-03-09 80 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