Перейти к содержанию
  • Регистрация
  • 0
x11

Ошибка InputQuery на Windows

Вопрос

Мультиплатформенное приложение. 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 получаю исключение:

Цитата

Project raised exception class EArgumentOutOfRangeException with message 'Argument out of range'.

 

На андроиде ошибки нет.

 

Screenshot_4.png

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


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

Рекомендуемые сообщения

  • 0

Хоть в хелпе и написано

Цитата

The length of AValues must be greater than or equal to the length of APrompts

под виндой размерности массивов должны совпадать. Посмотрите FMX.DialogHelper.TDialogBuilder.InputQuery

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


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

под виндой размерности массивов должны совпадать.

Под виндой, если передаю,

SetLength(val, 1);

то ошибки нет.

 

Это баг, получается?

Где-то в справке написано, что под виндой нельзя передавать массив, где больше одного элемента?

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


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

Это баг, получается?

Похоже на то.

2 минуты назад, x11 сказал:

Где-то в справке написано, что под виндой нельзя передавать массив, где больше одного элемента?

Нет, это видно из исходников, и не больше одного элемента а размерности параметров APrompts и AValues должны совпадать. От размерности APrompts зависит количество полей ввода в диалоге.

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


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

 а размерности параметров APrompts и AValues должны совпадать

 

Это уже не моя забота, это уже забора разработчиков FMX.

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


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

фигасе

вот вам 10 вопросов и 12 ответов, сами разбирайтесь, что с ними делать )))

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


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

Это уже не моя забота, это уже забора разработчиков FMX.

Не, ну если Вас не заботит то, что Ваше приложение будет выдавать ошибку под виндой - то конечно, пусть сами разбираются

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


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

Заботит, конечно.

Но приложение для Андроид.

Для чего тогда винда? Просто некоторые функции можно отлаживать на винде, т.к. это значительно удобней и быстрей.

Запуск и отладка на Андроиде - это долго.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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

    • От Rusland
      Если нажимаю Отмена в 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
      Мне нужно вводить числа.
      В 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 пользователей онлайн

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

×
×
  • Создать...