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

时间:2013-01-05 04:28:36

标签: delphi

在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文档
  

使用“执行”显示“任务”对话框。执行打开   任务选择对话框,当用户选择任务时返回true   点击打开。如果用户单击“取消”,则“执行”将返回false。

1 个答案:

答案 0 :(得分:10)

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

  

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

正如您所看到的,只有当TaskDialogIndirect函数返回S_OK时,方法Execute的结果才是 true

要评估对话框的结果,您必须改为使用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;

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