[Delphi] как сделать read-only Checkbox?

yolki

смысл такой: это информационный флаг.
может иметь состояния "checked" и "not checked", при этом рользователь его тыкать не должен.
можно ли обойтись стандартными компонентами?
типа поля Edit, read-only - туда выводится информация, пользователь может ткнуть и выделить но не может изменит содержимое.

stalker33rus10

Enabled:= false ?

oliver11

Можно стандартный TCheckBox с Enabled:=false; или обрабатывать onClick.

yolki

он серый тогда. выглядит не очень.
ОнКлик у двух десятков ставить ломает..
ладно, стибрим у rx или Express

stalker33rus10

А чем не устраивает OnClick у двух десятков?

yolki

тем что он разный у двух десятков.
ибо если делать типа такого:

procedure TForm1.CheckBox2Click(Sender: TObject);
var PrevState : Boolean;
begin
PrevState:=(Sender as TCheckBox).Checked;
(Sender as TCheckBox).Checked:=not PrevState;
end;

то получается зацикленная рекурсия.
есть другие соображения?

aleks058

Все однопоточное, так что можно просто добавить булевую переменную вот так:

var _isProcessingClick : Boolean = false;

procedure TForm1.CheckBox2Click(Sender: TObject);
var PrevState : Boolean;
begin
if (not _isProcessingClick) begin
_isProcessingClick := true;

PrevState:=(Sender as TCheckBox).Checked;
(Sender as TCheckBox).Checked:=not PrevState;

_isProcessingClick := false;
end;
end;

stalker33rus10

Как вариант повесить первоначальный код не на OnClick а на OnMouseUp.
Не очень красиво, но работать будет.
Но лучше - как написал

agaaaa

if CheckBox.Checked <> desiredChecked then CheckBox.Checked := desiredChecked;

Corrector

Обрабатывать OnClick как показано выше.
Если ломает делать 10 обработчиков, сделай эти 10 чекбоксов потомкоми от TSetiCheckBox = class (TCheckBox) в котором и будет обработчик
Оставить комментарий
Имя или ник:
Комментарий: