• 0
Rusland

Cancel в InputQuery

Вопросы

Если нажимаю Отмена в InputQuery,

    InputQuery('Укажите свой ответ', ['Ответ'], [''],
      procedure(const AResult: TModalResult; const AValues: array of string)
      begin        
        if (AResult=mrOk) and (AValues[0].Trim<>'') then
        begin
          // делаем что-то с AValues[0]          
        end;
      end
    );

то получаю Segmentation Fault в FMX.Dialogs.Android (которого в Seattle не существовало)

procedure TFMXDialogListener.onDialogClosed(modalResult: Integer;
  values: TJavaObjectArray<JString>);
var
  I: Integer;
begin
  FModalResult := modalResult;
  if values <> nil then
  begin
    SetLength(FValues, values.Length);
    for I := 0 to values.Length - 1 do
    begin
        if FModalResult = mrOk then
          FValues[I] := JStringToString(values.Items[I])
        else
          FValues[I] := FDefaultValues[I]; // тут
    end
  end;
  TThread.Queue(FCallerThread, DoDialogClosed);
end;

Где у меня ошибка?

PS. Delphi 10.1 Berlin

PPS. в справке сказано Warning: InputQuery is deprecated. Please use Platform.IFMXDialogServiceAsync.MessageDialogAsync.  InputQuery вышел из моды? )

 

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 0

В общем теперь лучше вызывать так TDialogServiceAsync.InputQuery. Ошибка пропала. Видимо это некий баг студии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1
3 часа назад, Rusland сказал:

 InputQuery вышел из моды? )

и не только...
What's New - Berlin:
Simplified Dialog API
Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the
procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services
that provide support for synchronous and asynchronous dialog boxes, respectively.
The following table summarizes the API changes:

Deprecated Members

New Members 

FMX.Dialogs.ShowMessage*

FMX.Dialogs.ShowMessageFmt*

FMX.Dialogs.ShowMessagePos

ShowMessageAsync

ShowMessageSync

 

FMX.Dialogs.MessageDlg

FMX.Dialogs.MessageDlgPos

FMX.Dialogs.MessageDlgPosHelp

FMX.Platform.IFMXDialogService.MessageDialog 

MessageDialogAsync

MessageDialogSync

 

 

FMX.Dialogs.InputBox

FMX.Dialogs.InputQuery

FMX.Platform.IFMXDialogService.InputQuery 

InputQueryAsync

InputQuerySync

 


* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync
or ShowMessageSync instead nonetheless.

Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper
classes provide class methods and functions that allow you to call the new procedures and functions for dialog
boxes without the need of an instance of the corresponding dialog box platform service.
Other FireMonkey

Изменено пользователем enatechno

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Коллеги,
подскажите пожалуйста, как при вызове InputQueryAsync или до этого указать, что я хочу вводить только цифры (чтобы открывалась цифровая клавиатура, а не общая)?

Меня интересует платформа Android, но может есть и общий способ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
29 минут назад, Pax Beach сказал:

Коллеги,
подскажите пожалуйста, как при вызове InputQueryAsync или до этого указать, что я хочу вводить только цифры (чтобы открывалась цифровая клавиатура, а не общая)?

Меня интересует платформа Android, но может есть и общий способ?

 

вот

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От x11
      Мультиплатформенное приложение. Delphi Tokyo.
      указываю 2 параметра для VAL и передаю это в TDialogService.InputQuery
       
      procedure TfmMain.Send(id: integer); Var val: array of string; cap: string; begin // запускаем диалог ввода имени SetLength(val, 2); val[0] := VarToStr(qCalls.Lookup('ID', id, 'name')); val[1] := id.ToString; cap := 'Введите имя'; TDialogService.InputQuery(cap, ['Имя клиента: '], Val, InputDialogHandlerGetShotName); end;  
      В итоге, в недрах TDialogService.InputQuery получаю исключение:
       
      На андроиде ошибки нет.
       

    • От Rusland
      Мне нужно вводить числа.
      В Edit можно указать тип клавиатуры KeyboardType = PhonePad. 
       
      Как сделать появляющуюся при InputQuery клавиатуру типа PhonePad?
      procedure TForm1.Label1Tap(Sender: TObject; const [Ref] Point: TPointF); begin InputQuery('Введите число', [''], [''], procedure(const AResult: TModalResult; const AValues: array of string) begin if (AResult=mrOk) and (AValues[0].Trim<>'') then Label1.Text:=AValues[0].Trim; end );  end;
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу