В новых версиях Delphi вы можете использовать помощники классов для добавления этой функциональности:
CheckBox.SetCheckedWithoutClick(False);
с помощью следующего помощника класса для VCL TCheckBox
:
TCheckBoxHelper = class helper for TCheckBox
procedure SetCheckedWithoutClick(AChecked: Boolean);
end;
procedure TCheckBoxHelper.SetCheckedWithoutClick(AChecked: Boolean);
begin
ClicksDisabled := True;
try
Checked := AChecked;
finally
ClicksDisabled := False;
end;
end;
Только для полноты: FMX TCheckBox
будет вести себя аналогично (запуск OnChange
). Вы можете обойти это, используя следующий помощник класса:
TCheckBoxHelper = class helper for TCheckBox
procedure SetCheckedWithoutClick(AChecked: Boolean);
end;
procedure TCheckBoxHelper.SetCheckedWithoutClick(AChecked: Boolean);
var
BckEvent: TNotifyEvent;
begin
BckEvent := OnChange;
OnChange := nil;
try
IsChecked := AChecked;
finally
OnChange := BckEvent;
end;
end;
Отказ от ответственности: Спасибо, dummzeuch за оригинальную идею. Знайте об обычных подсказках относительно помощников класса.