6

Delphi XE2/XE3 で次のコードを実行します。

with TTaskDialog.Create(Self) do begin
  try
    if Execute then
      ShowMessage('Success')
    else
      ShowMessage('Failed');
  finally
    Free;
  end;
end;

ダイアログを閉じるためにどのボタンをクリックしても、表示されるメッセージは常にSuccessです。

TTaskDialog.Execute次のように記述された Delphi ドキュメント

実行を使用して、タスク ダイアログを表示します。Execute はタスク選択ダイアログを開き、ユーザーがタスクを選択して [開く] をクリックすると true を返します。ユーザーが [キャンセル] をクリックすると、Execute は false を返します。

4

1 に答える 1

11

ドキュメントが正しくないようです、これはTTaskDialog.Executeメソッドの実行フローです:

TTaskDialog.Execute-> TCustomTaskDialog.Execute-> TCustomTaskDialog.DoExecute-> TaskDialogIndirect = S_OK?

ご覧のとおり、メソッドの結果はExecute、関数がS_OKを返す場合にのみtrueになります。TaskDialogIndirect

ModalResultダイアログの結果を評価するには、代わりにプロパティを使用する必要があります。

  with TTaskDialog.Create(Self) do
  begin
    try
      if Execute then
        case ModalResult of
         mrYes    : ShowMessage('Success');
         mrCancel : ShowMessage('Cancel');
        else
         ShowMessage('Another button was pressed');
        end;
    finally
      Free;
    end;
  end;

注:閉じるボタンを使用してダイアログを閉じると、mrCancel値はModalResultプロパティに返されます。

于 2013-01-05T04:49:08.437 に答える