6

在 Delphi XE2/XE3 中执行以下代码

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

无论您单击哪个按钮关闭对话框,显示的消息始终为Success.

Delphi 文档编写TTaskDialog.Execute

使用执行显示任务对话框。Execute 打开任务选择对话框,当用户选择一个任务并单击 Open 时返回 true。如果用户单击取消,则执行返回 false。

4

1 回答 1

11

似乎哪个文档不正确,这是该TTaskDialog.Execute方法的执行流程:

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

如您所见,仅当函数返回 S_OK时,该方法的结果才Execute真。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 回答