Как отобразить «недоступный» флажок только для чтения с использованием Delphi под темами Windows - PullRequest
2 голосов
/ 09 марта 2011

Я хочу, чтобы флажки «только для чтения» были неактивными, но отображают их статус отмеченных / не отмеченных в Windows (XP и выше), но у меня есть некоторые проблемы.

ПРИМЕЧАНИЕ. - Относительно «только для чтения». Похоже, что в Delphi TCheckBox даже нет опции «только для чтения», это было «подделано» путем помещения его в TPanel и отключения этого ... Однако вопрос по-прежнему остается в силе, как можно получить неактивный флажок только для чтения ИЛИ неактивный флажок, отображающий его состояние.

Отключенные флажки выделены серым цветом, но они не отображают проверенное или непроверенное состояние. Флажки только для чтения могут, но когда Windows создает их, они просто выглядят как обычные редактируемые флажки. Поле, доступное только для чтения, не может изменить свое значение, но похоже, что оно может.

В XP с отключенными темами (т.е. в классическом режиме) он работает правильно.

Решения, которые неприемлемы из-за того, насколько они неуклюжи / непрофессиональны для большого приложения или соотношения времени разработки и его использования, включают в себя: - Вручную серого текста и отображения изображения статуса флажка. - Отключение тем на флажках, так как смотреть без них некрасиво. - Использование пользовательских флажков

Снимки экрана с проблемой - это три флажка, один из которых отключен, один только для чтения и один обычный:

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

Хотя флажки «только для чтения» и «редактируемые» выглядят по-разному, это только потому, что поле для редактирования на первом изображении имеет фокус. Только для чтения будет выглядеть так же, если оно с фокусом, как показано на втором изображении.

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Флажки с темами показывают отключенную отметку при отключении, как вы можете видеть на этом скриншоте:

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
0 голосов
/ 09 марта 2011

Аноним запросил код, который показывает отключенные флажки, показывающие их проверенное состояние.

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

...