5

OK、これは簡単なはずですが、少なくともあまり良くないドキュメントには解決策が見つかりません..でTTaskDialog、1つのチェックボックスを追加するオプションがあります。tfVerificationFlagCheckedのフラグを使用して、その初期状態を制御できますFlags。しかし、ダイアログが表示された後に状態を取得するにはどうすればExecuteよいですか?

もちろんOnVerificationClicked、各呼び出しで、イベントを使用して、チェックボックスの初期状態に最初は等しいローカル変数を切り替えることができます。しかし、より自然な解決策が期待されます。

4

3 に答える 3

9

なんてことだ、エンバカデロは間違いを犯した。

私のいくつかのテストでは、チェックボックスが最初はオフになっているが、ユーザーがチェックした場合、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手動で切り替えるアプローチを採用すると思います。

于 2010-08-27T16:15:40.773 に答える
2

Flagsダイアログを閉じた後、tfVerificationFlagCheckedまだ存在するかどうかを確認するために読むことはできませんか?

于 2010-08-27T16:00:32.673 に答える
2

Delphi XE7(おそらく以前のバージョンも)では、これは解決されたようです。

choice := tfVerificationFlagChecked in tskbox.Flags;

ブール変数であるchoiceは、チェックされたステータスを返すことができます。

于 2015-01-28T14:04:08.470 に答える