2

読み取り専用のチェックボックスをグレー表示にしたいのですが、Windows(XP以降)ではチェックされている/チェックされていないステータスを表示しますが、いくつか問題があります。

注-「読み取り専用」について:DelphiのTCheckBoxには読み取り専用オプションすらありません。これは、TPanelに配置して無効にすることで、「偽造」されています...ただし、質問は引き続き有効です。 、グレー表示された読み取り専用チェックボックス、またはその状態を表示する非アクティブなチェックボックスをどのように実現しますか。

無効になっているチェックボックスはグレー表示されていますが、チェックされている状態やチェックされていない状態は表示されません。読み取り専用のチェックボックスを使用できますが、Windowsでテーマを設定すると、通常の編集可能なチェックボックスのように見えます。読み取り専用ボックスの値を変更することはできませんが、変更できるように見えます。

テーマがオフになっている(つまり、クラシックモードの)XPでは、正しく機能します。

大規模なアプリやその開発時間/現金比率がいかに不器用で専門的でないために受け入れられない解決策には、次のものがあります。-テキストを手動でグレー表示し、チェックボックスのステータスの画像を表示する。-チェックボックスのないテーマは見栄えが悪いため、テーマを無効にします。-カスタムチェックボックスの使用

問題のスクリーンショット-これらは3つのチェックボックスで、1つは無効、1つは読み取り専用、もう1つは通常です。

ここに画像の説明を入力してください ここに画像の説明を入力してください

読み取り専用と編集可能なチェックボックスは異なって表示されますが、それは最初の画像の編集可能なボックスにフォーカスがあるためです。2番目の画像に示すように、フォーカスのあるものであれば、読み取り専用のものは同じように見えます。

4

2 に答える 2

1

次のスクリーンショットに示すように、テーマのあるチェックボックスには、無効にするとチェックマークが表示されます。

ここに画像の説明を入力してください

これを作成するために使用される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
于 2011-03-09T20:30:38.170 に答える
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.

ここに画像の説明を入力してください

于 2011-03-09T20:29:36.853 に答える