Async InputQuery不处理“取消”按钮

时间:2017-03-21 10:30:48

标签: 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;

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

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

我正在使用RADStudio 10.1柏林。

编辑:

我做了一些测试:

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

1 个答案:

答案 0 :(得分:6)

这是一个已知的错误。在Embarcadero的Quality Portal中已经有关于此问题的错误报告:

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

RSP-16670 Problem of TDialogService.InputQuery dialog box

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

  

开放

FMX.DialogHelper.pas
     

找到

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

查找

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

在此行之后,添加

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