Async InputQuery 不处理取消按钮

Async InputQuery doesn't handle Cancel button

我正在使用对 TDialogServiceAsync.InputQuery() 的简单调用,只需一个输入。它只是忽略 Cancel 按钮和 window 的 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;

如果我按下 Cancel,InputQuery window 不会关闭,并且不会调用我的回调过程。

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

我正在使用 RADStudio 10.1 Berlin。


编辑:

我做了几个测试:

  1. 开启 Windows 32 位取消按钮 有效
  2. 在 Windows 64 位取消按钮上 有效
  3. 开启 iOS 64 位取消按钮 工作正常
  4. 开启 Android 32 位取消按钮 工作正常

这是一个已知错误。在 Embarcadero 的 Quality Portal:

中已经有针对此问题的错误报告

RSP-16148 TDialogService.InputQuery() - Cancel button doesn't work

RSP-16670 Problem of TDialogService.InputQuery dialog box.

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

open

FMX.DialogHelper.pas

find

class function TDialogBuilder.InputQuery(const ACaption: string; const APrompts: array of string;

find

Button := CreateButton(LForm, BorderSize, WorkArea, Layout, SMsgDlgCancel, mrCancel, LForm.ButtonOnClick);

after this line, add

//fix or add by flyign wang.
Button.Cancel := True;
LForm.FCanCancel := True;