Как проверить, установлен ли флажок в Delphi TTaskDialog?
Хорошо, это должно быть легко, но я не нахожу решение, по крайней мере, в не очень хорошей документации.. В TTaskDialog
, у вас есть возможность добавить один флажок. Вы можете контролировать его начальное состояние с помощью tfVerificationFlagChecked
флаг в Flags
, Но как получить состояние после того, как диалог был Execute
д?
Конечно, можно использовать OnVerificationClicked
событие и переключение локальной переменной, изначально равной начальному состоянию флажка, при каждом вызове. Но можно ожидать более естественного решения.
4 ответа
О Боже, Эмбаркадеро совершил ошибку.
Несколько моих тестов показали, что если флажок изначально снят, но проверен пользователем, то tfVerificationFlagChecked
флаг будет установлен. Но если флаг установлен изначально, и пользователь снимает флажок, то tfVerificationFlagChecked
не будут удалены из Flags
задавать. И это не странно. Код VCL делает
Result := TaskDialogIndirect(LTaskDialog, {$IFNDEF CLR}@{$ENDIF}LModalResult,
{$IFNDEF CLR}@{$ENDIF}LRadioButton, {$IFNDEF CLR}@{$ENDIF}LVerificationChecked) = S_OK;
FModalResult := LModalResult;
if Result then
begin
FButton := TTaskDialogButtonItem(FButtons.FindButton(FModalResult));
FRadioButton := TTaskDialogRadioButtonItem(FRadioButtons.FindButton(LRadioButton));
if LVerificationChecked then
Include(FFlags, tfVerificationFlagChecked);
end;
Обратите внимание, что флажок включен, если флажок установлен, когда диалоговое окно закрывается, но нет кода для удаления флажка, если флажок снят пользователем.
Конечно, можно ожидать, что последняя часть кода прочитала
if LVerificationChecked then
Include(FFlags, tfVerificationFlagChecked)
else
Exclude(FFlags, tfVerificationFlagChecked)
Я думаю, что я пойду с OnVerificationClicked
ручное переключение.
В Delphi XE7 (возможно, и в более ранних версиях) это, похоже, решено.
choice := tfVerificationFlagChecked in tskbox.Flags;
Выбор, булева переменная, может возвратить проверенный статус.
Ты не умеешь читать Flags
после закрытия диалога, чтобы увидеть, tfVerificationFlagChecked
все еще присутствует?
Кажется, это работает в Delphi 10.4. Flags
свойство,tfVerificationFlagChecked
, теперь является надежным индикатором, даже если пользователь изменяет значение несколько раз.
if dlg.Execute then
begin
wasChecked:=tfVerificationFlagChecked in dlg.Flags;
// do something
end;