Как проверить, установлен ли флажок в Delphi TTaskDialog? - PullRequest
5 голосов
/ 27 августа 2010

ОК, это должно быть легко, но я не нахожу решение, по крайней мере, в не очень хорошей документации .. В TTaskDialog у вас есть возможность добавить одну проверку. коробка. Вы можете контролировать его начальное состояние с помощью флага tfVerificationFlagChecked в Flags. Но как получить состояние после того, как диалог был Execute d?

Конечно, можно использовать событие OnVerificationClicked и переключать локальную переменную, изначально равную начальному состоянию флажка, при каждом вызове. Но можно ожидать более естественного решения.

Ответы [ 3 ]

9 голосов
/ 27 августа 2010

Боже мой, Эмбаркадеро допустил ошибку.

Несколько моих тестов показали, что если флажок изначально снят, но проверен пользователем, то будет установлен флаг 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 подходом ручного переключения.

2 голосов
/ 27 августа 2010

Не можете ли вы прочитать Flags после закрытия диалогового окна, чтобы увидеть, присутствует ли tfVerificationFlagChecked?

0 голосов
/ 28 января 2015

В Delphi XE7 (возможно, и в более ранних версиях) это, похоже, решено.

choice := tfVerificationFlagChecked in tskbox.Flags;

выбор, булева переменная, может возвращать проверенный статус.

...