среда, 22 января 2014 г.

Используем виртуальную клавиатуру

Работа с виртуальной клавиатурой реализована при помощи сервиса IFMXVirtualKeyboardService. Проверил на Android 4.1.2 и Windows 7, работает отлично.

upd (20.04.2014). Добавил код для Delphi XE6


Что мы можем:
Методы:
  • ShowVirtualKeyboard (const AControl: TFmxObject) - Открыть клавиатуру, в скобках указываем контрол
  • HideVirtualKeyboard - Закрыть клавиатуру
  • GetVirtualKeyBoardState - Получить статус клавиатуры
Свойства:
  • VirtualKeyBoardState – Статус клавиатуры (возвращает тоже самое, что и GetVirtualKeyBoardState)
Также не забываем про возможность получить статус клавиатуры при помощи событий "OnVirtualKeyboardShown", "OnVirtualKeyboardHidden" для формы.

Кладём на форму Edit, Label, Button. По клику на кнопке(Button), будем открывать, и закрывать клавиатуру, а в Label выводить соответствующее Boolean значение.

Для работы с данным сервисом необходимо подключить модули:
uses
 FMX.Platform, FMX.VirtualKeyboard;

Теперь код для кнопки(Delphi XE5 Update 2).
procedure TForm1.Button1Click(Sender: TObject);
var
  Keyboard: IFMXVirtualKeyboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(Keyboard)) then
  if vksVisible in Keyboard.GetVirtualKeyBoardState then
  begin
    Keyboard.HideVirtualKeyboard;
    Label1.Text := 'Keyboard: False';
  end
  else
  begin
    Keyboard.ShowVirtualKeyboard(Edit1);
    Label1.Text := 'Keyboard: True';
  end;
end;

Код для кнопки (Delphi XE6):
procedure TForm1.Button1Click(Sender: TObject);
var
  Keyboard: IFMXVirtualKeyboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(Keyboard)) then
  begin
    if TVirtualKeyBoardState.Visible in Keyboard.GetVirtualKeyBoardState then
    begin
      Keyboard.HideVirtualKeyboard;
      Label1.Text := 'Keyboard: False';
    end
    else
    begin
      Keyboard.ShowVirtualKeyboard(Edit1);
      Label1.Text := 'Keyboard: True';
    end;
  end;
end;

Результат:

7 комментариев:

  1. Большое спасибо за статью, как раз не знал как с клавиатурой обращаться ;)

    ОтветитьУдалить
  2. "vksVisible" больше нет в Delphi XE6, теперь - TVirtualKeyboardState.Visible

    ОтветитьУдалить
    Ответы
    1. Данил, спасибо, сейчас добавлю информацию в пост.

      Удалить
  3. кто нибудь реализовал программно переключение раскладки клавиатуры? Например в регистрации программы я предлагаю пользователю ввести код капчи (5 символов).
    Все символы английские.
    Было бы удобно при клике по определённому полю ввода (например капча) принудительно перевести клавиатуру на английскую раскладку. И соответственно при активации поля ввода "имя" на русскую... Удобно ведь...

    ОтветитьУдалить