Async InputQuery不处理"取消"按钮

Hyp*_*peZ 5 delphi firemonkey delphi-10.1-berlin

我正在使用TDialogServiceAsync.InputQuery()单个输入进行简单的调用.它只是忽略了Cancel按钮和窗口的X关闭按钮.

Ok按钮工作正常.

这是我的代码:

uses
  FMX.DialogService.Async;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TDialogServiceAsync.InputQuery('Title',
   ['Insert value'], ['bla bla'],
  procedure(const AResult: TModalResult; const AValues: array of string)
  begin
    if Aresult = mrOk then
      ShowMessage('Ok!');

    if Aresult = mrCancel then
      ShowMessage('Cancel!'); // this is never called
  end);
end;
Run Code Online (Sandbox Code Playgroud)

如果我按下Cancel,则InputQuery窗口不会关闭,并且不会调用我的回调过程.

按下Cancel按钮后如何关闭InputQuery表单?

我正在使用RADStudio 10.1柏林.


编辑:

我做了几个测试:

  1. 在Windows 32位的取消按钮工作
  2. 在Windows 64位取消按钮工作
  3. 在iOS 64位取消按钮正常工作
  4. 在Android 32位取消按钮正常工作

Rem*_*eau 6

这是一个已知的错误.在Embarcadero的质量门户中已经有关于此问题的错误报告:

RSP-16148 TDialogService.InputQuery() - 取消按钮不起作用

RSP-16670 TDialogService.InputQuery对话框问题.

后一张票提供了一个修复FMX.DialogHelper.pas:

打开

FMX.DialogHelper.pas
Run Code Online (Sandbox Code Playgroud)

class function TDialogBuilder.InputQuery(const ACaption: string; const APrompts: array of string;
Run Code Online (Sandbox Code Playgroud)

Button := CreateButton(LForm, BorderSize, WorkArea, Layout, SMsgDlgCancel, mrCancel, LForm.ButtonOnClick);
Run Code Online (Sandbox Code Playgroud)

在这一行之后,添加

//fix or add by flyign wang.
Button.Cancel := True;
LForm.FCanCancel := True;
Run Code Online (Sandbox Code Playgroud)