Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как получить от виртуальной клавиатуры символ который был введен?


MaratBest

Вопрос

Задача получить нажатый символ (или код символа) на виртуальной клавиатуре!

D10, android.

Для примера. есть форма, есть кнопка , при нажатии выводим виртуальную клавиатуру, указываем вывод на form1 (или edit, memo)

Keyboard.ShowVirtualKeyboard(memo1);

как получить нажатый символ ? или я туплю..... или ...хз

всю голову сломал

думал через Edit сделать Edit1KeyDown, но там Key всегда 0 если цифры, коды если только служебные клавиши, на символы вообще не реагирует

думаю сеть простой способ ?

 

 

 

Ссылка на комментарий

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

  • 0
6 часов назад, chaplin.u@gmail.com сказал:

InputQuery подразумевает всегда какой-то диалог , мне нужно без него 

Ссылка на комментарий
  • 0

У меня виртуальная клавиатура передает в программу только Enter(13) и Backspace(08)

Открываю так

TPlatformServices.Current.SupportsPlatformService(
          IFMXVirtualKeyboardService,
          IInterface(aVirtualKeyboardService));
    if (aVirtualKeyboardService <> nil) then
        aVirtualKeyboardService.ShowVirtualKeyboard(fMain);

Обработчик нажатий кнопок

procedure TfMain.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
var i:integer;
    s:string;
   aVirtualKeyboardService: IFMXVirtualKeyboardService;
begin
    //tCursor.Visible := false;
    if Key=27 then
    begin
        sInputBox := '';
        iCurrentPos := 1;
    end;
    if Key=37 then
    begin
        if iCurrentPos > 0 then
            iCurrentPos := iCurrentPos-1;
    end;
end;

Почему не срабатывает события при вводе текста?

Berlin+ android , под win работает как надо.

Ссылка на комментарий
  • 0
8 часов назад, AlexShaman сказал:

Berlin+ android , под win работает как надо.

Да, таким способом на мобильных платформах работать не получится. Там всё хуже, т.к. ввод может быть очень замысловатым, включая голосом. 
Тут я посоветую смотреть исходники, какие там интерфейсы реализованы и как.

Ссылка на комментарий
  • 0

Нашел готовое решение, переделал немного (Berlin).

Используя это решение можно получать символы от вирт клавиатуры.

Регистрация клавиатуры SetMyVirtualKeyboard(const AControl: TFmxObject), где AControl - компонент обрабатывающий события OnKeyUp

procedure SetMyVirtualKeyboard(const AControl: TFmxObject);
begin
  {$IFDEF ANDROID}
  if FNativeVKService <> nil then Exit;
  if not Assigned(FMyVirtualKeyboardAndroid) then
  begin
      FMyVirtualKeyboardAndroid := TVirtualKeyboardAndroidEx.Create;
      FMyVirtualKeyboardAndroid.OnKeyUp := TForm(AControl).OnKeyUp;
  end;
  FNativeVKService := IFMXVirtualKeyboardService(TPlatformServices.Current.GetPlatformService(IFMXVirtualKeyboardService));
  if FNativeVKService <> nil then
  begin
    TPlatformServices.Current.RemovePlatformService(IFMXVirtualKeyboardService);
  end;
  TPlatformServices.Current.AddPlatformService(IFMXVirtualKeyboardService, FMyVirtualKeyboardAndroid);
  {$ENDIF}
end;

Вызов клавиатуры стандартно

    TPlatformServices.Current.SupportsPlatformService(
          IFMXVirtualKeyboardService,
          IInterface(aVirtualKeyboardService));
    if (aVirtualKeyboardService <> nil) then
        aVirtualKeyboardService.ShowVirtualKeyboard(fMain);

Скрытие, тоже стандартно

    if (key=13) then
    begin //если нажата клавиша enter
        if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(aVirtualKeyboardService)) then
            aVirtualKeyboardService.HideVirtualKeyboard;
    end;

 

 

 

MyFMX.VirtualKeyboard.Android.rar

Изменено пользователем AlexShaman
Добавлен тег "Код"
Ссылка на комментарий

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

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