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

Числовая клавиатура в InputQuery

Вопрос

Мне нужно вводить числа.

В 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;
Изменено пользователем Rusland

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


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

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

  • 0

я просто сделал свой аналог inputquery

это не просто, а очень просто...

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


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

Основная проблема, что я решал - приподнять окно над клавиатурой

Ну и некая анимация

пример использования

procedure TUserProfile.InputPassOKHandler(Sender:TObject);
var
  t: string;
  d:TMyInputQuery;
begin
  d := Sender as TMyInputQuery;
  t:=apiObject.token;
  apiObject.OpenSessionPass(.........);
  if (ApiObject.lastError.code<>ERR_NO_ERROR)and(ApiObject.lastError.code<>ERR_SESSION_ALREADY_OPEN) then
  begin
    apiObject.token := t;
    ShowMessage('Неверный пароль');
    exit;
  end;

  PersData[dfPassword] := d.Values[0];
  SavePersData;
  reloadPersData;
  init;
end;


procedure TUserProfile.UpdateExistingUser;
var d:TMyInputQuery;
begin
  if PersData[dfPassword]='' then
  begin
    d:=TMyInputQuery.Create(['Для изменения данных введите пароль'],[''],self, InputPassOKHandler);
    try
      // тут можно все что угодно делать с Edit'ами на форме перед показом
      d.ShowModal(procedure (AResult:TModalResult) begin end );
    finally
      freeandNil(d);
    end;
  end
  else
  begin
    SavePersData;
    reloadPersData;
    init;
  end;
end;

MyDialogs.7z

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


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

Отдельная форма - это конечно тоже вариант, но в данном случае хотелось бы использовать стандартный вариант. 

Знать бы только как заменить клавиатуру )

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


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

стандартный вариант по сути ничем не отличается от этого ))

полный контроль над созданной формой тоже чего-то стоит...

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


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

 

Основная проблема, что я решал - приподнять окно над клавиатурой

Ну и некая анимация

пример использования

procedure TUserProfile.InputPassOKHandler(Sender:TObject);
var
  t: string;
  d:TMyInputQuery;
begin
  d := Sender as TMyInputQuery;
  t:=apiObject.token;
  apiObject.OpenSessionPass(.........);
  if (ApiObject.lastError.code<>ERR_NO_ERROR)and(ApiObject.lastError.code<>ERR_SESSION_ALREADY_OPEN) then
  begin
    apiObject.token := t;
    ShowMessage('Неверный пароль');
    exit;
  end;

  PersData[dfPassword] := d.Values[0];
  SavePersData;
  reloadPersData;
  init;
end;


procedure TUserProfile.UpdateExistingUser;
var d:TMyInputQuery;
begin
  if PersData[dfPassword]='' then
  begin
    d:=TMyInputQuery.Create(['Для изменения данных введите пароль'],[''],self, InputPassOKHandler);
    try
      // тут можно все что угодно делать с Edit'ами на форме перед показом
      d.ShowModal(procedure (AResult:TModalResult) begin end );
    finally
      freeandNil(d);
    end;
  end
  else
  begin
    SavePersData;
    reloadPersData;
    init;
  end;
end;

модуль UGlobal отсутствует, точней функция GetParentForm. Можете её выложить?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
function GetParentForm(o:TFmxObject):TForm;
var p:TFmxObject;
begin
  result := nil;
  p:=o.parent;
  while (p<>NIL)and(not (p is tform)) do
    p:=p.parent;
  if p<>NIL then
    result := P as TForm;
end;

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


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

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

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

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

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

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

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

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

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


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

    • От 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
      Если нажимаю Отмена в 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 вышел из моды? )
       
  • Последние посетители   0 пользователей онлайн

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

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