TTaskDialog.Execute总是返回True,甚至点击取消

Cha*_*ang 5 delphi

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

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

无论您点击什么按钮关闭对话框,显示的消息始终是Success.

写德尔福文档TTaskDialog.Execute作为

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

RRU*_*RUZ 10

看来文档不正确,这是方法的执行流程TTaskDialog.Execute:

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

如您所见,仅当函数返回S_OK时,方法的结果才ExecuteTaskDialogIndirect.

要评估对话框的结果,必须使用该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;
Run Code Online (Sandbox Code Playgroud)

注意:如果使用关闭按钮关闭对话框,mrCancel则会在ModalResult属性中返回该值.

  • 这是考虑设计缺陷还是文档错误?我个人认为这是一个设计缺陷,因为没有办法让 TTaskDialog.Execute 返回 false。 (2认同)