Async InputQuery не обрабатывает кнопку «Отмена»

Я использую простой вызов 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 не закроется, и моя процедура обратного вызова не будет вызвана.

Как я могу закрыть форму InputQuery при нажатии кнопки Cancel?

Я использую RADStudio 10.1 Берлин.


Редактировать:

Я сделал несколько тестов:

  1. В 32-разрядной версии Windows кнопка отмены НЕ работает
  2. В 64-разрядной версии Windows кнопка отмены НЕ работает
  3. В 64-разрядной версии iOS кнопка отмены работает корректно
  4. На 32-битной версии Android кнопка отмены работает корректно

person HypeZ    schedule 21.03.2017    source источник
comment
На какую ОС вы ориентируетесь?   -  person David Heffernan    schedule 21.03.2017
comment
У меня такая проблема с Win32 и Win64. Я только что попробовал на iOS64, и это работает   -  person HypeZ    schedule 21.03.2017
comment
Добро пожаловать в странный и удивительный мир FMX   -  person David Heffernan    schedule 21.03.2017
comment
Даже если в документах указано, что есть только поле ввода и кнопка «ОК» ( docwiki.embarcadero.com/Libraries/Berlin/en/ ) форма также содержит кнопку "Отмена"   -  person HypeZ    schedule 21.03.2017


Ответы (1)


Это известная ошибка. На портале качества Embarcadero уже есть отчеты об ошибках:

RSP-16148 TDialogService.InputQuery() — кнопка "Отмена" не работает

RSP-16670 Проблема диалогового окна TDialogService.InputQuery.

Последний билет содержит исправление для 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;
person Remy Lebeau    schedule 21.03.2017
comment
С этим исправлением кнопка Отмена работает нормально, но диалоговое окно нельзя закрыть мышью [x], а после нажатия кнопки ESC на клавиатуре появляется дополнительная ошибка указателя. Я добавил: LForm.ModalResult:=mrCancel; ниже LForm.FCanCancel :=True и закомментирован Close в TDialogForm.FormKeyDown. Теперь все нормально работает в винде. Мобильные платформы проверю позже. - person zdzichs; 07.04.2017