• 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

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


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

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

  • 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

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От 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 пользователей онлайн

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