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

Вызов клавиатуры в Windows 8-8.1


Dozent

Вопрос

День добрый! Как вызвать клавиатуру при попадании фокуса в эдит, приложение под 8.1? Я кинул на форму эдит указал тип клавиатуры, запускаю проект, тыкаю на эдит но клавиатура не появляется....

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

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

  • 0

Вообщем реализация такая

//добавляем в uses
ShellApi, Winapi.Windows, Winapi.messages;

// вызов сенсорной клавиатуры
function ExpandEnvironmentVar(var Value: string): Boolean;
var
  R: Integer;
  Expanded: string;
  procedure StrResetLength(var S: string);
  var
    I: Integer;
  begin
    for I := 0 to Length(S) - 1 do
      if S[I + 1] = #0 then
      begin
        SetLength(S, I);
        Exit;
      end;
  end;

begin
  SetLength(Expanded, 1);
  R := ExpandEnvironmentStrings(PChar(Value), PChar(Expanded), 0);
  SetLength(Expanded, R);
  Result := ExpandEnvironmentStrings(PChar(Value), PChar(Expanded), R) <> 0;
  if Result then
  begin
    StrResetLength(Expanded);
    Value := Expanded;
  end;
end;

procedure TForm1.Edit2Click(Sender: TObject);
var
  S: string;
begin
  S := '%CommonProgramW6432%\microsoft shared\ink\tabtip.exe';
  if ExpandEnvironmentVar(S) then
    Caption := S
  else
    Caption := S; { :-) }
  ShellExecute(0, PChar('open'), PChar(Caption), nil, nil, SW_SHOWNORMAL);
end;

//закрытие
procedure TForm1.Button1Click(Sender: TObject);
var
  MyHandle1: THandle;
begin
  MyHandle1 := FindWindow('IPTip_Main_Window', nil);

  if MyHandle1 <> 0 then
  begin
    PostMessage(MyHandle1, WM_SYSCOMMAND, SC_CLOSE, 0);
    Label2.Text := IntToStr(MyHandle1);
  end;

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

по этой ссылке не подходит, вызывается не та клавиатура...

Как понять "не та клавиатура"? Она в винде одна. В принципе "другая" вызваться не может. Ваш код - это просто перевод информации ссылки на хабре с С++ на делфи.

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

не та значит нета:) Есть экранная клавиатура, а есть сенсорная и ехе файлы разные для этих приложений...

 

 Ваш код - это просто перевод информации ссылки на хабре с С++ на делфи.

 

а я и неговорю что придумал это сам... за ссылку спасибо

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

не та значит нета :) Есть экранная клавиатура, а есть сенсорная и ехе файлы разные для этих приложений... 

Простите за назойливость: можно Вас попросить привести скриншоты сенсорной и экранной клавиатур, а так же назовите имена exe файлов для этих клавиатур?

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

Предлагаю такой эксперимент: Форма, на ней 2 TEdit, у одного стоит PasswordChar. Компилим, запускаем на планшете с виндой 8+ без подключённой клавиатуры.

Результат будет таков: безо всякой дополнительной обработки при получении фокуса того поля ввода, где установлен PasswordChar, сенсорная клава будет появляться. Фокус на другом поле ввода - клава будет убираться. Отсюда вывод - чтобы клава появлялась автоматом, поле ввода должно нести в себе какой-то стиль окна или расширенный стиль окна или стиль класса, в общем, что-то из этой области. Этот стиль окна используется при получении окном сообщения EM_SETPASSWORDCHAR при условии наличия этого самого Char. Прокурил насколько мог VCL, не смог найти место обработки этого сообщения, оно где-то глубже, чем сама VCL.

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

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

Прокурил насколько мог VCL, не смог найти место обработки этого сообщения, оно где-то глубже, чем сама VCL.

Пардон... а при чем здесь VCL? Или вам под него надо клавиатуру показывать?

Изменено пользователем kami
Ссылка на комментарий
  • 0
23 часа назад, kami сказал:

Пардон... а при чем здесь VCL? Или вам под него надо клавиатуру показывать?

Предлагаемый мною эксперимент реализован на VCL. Его цель - продемонстрировать аргументы о том, что в винде уже реализована автоматизация по всплыванию тач-клавы. Задача - научиться использовать эту автоматизацию, потому что вызовы клавы через шелэкзекьют это плохой вариант решения проблемы. 

И таки да, в моём реальном случае клава нужна в приложении, реализованном на VCL.

Ссылка на комментарий
  • 0
В 12.12.2016 в 16:08, Lem0nti сказал:

Предлагаю такой эксперимент: Форма, на ней 2 TEdit, у одного стоит PasswordChar. Компилим, запускаем на планшете с виндой 8+ без подключённой клавиатуры.

Результат будет таков: безо всякой дополнительной обработки при получении фокуса того поля ввода, где установлен PasswordChar, сенсорная клава будет появляться. Фокус на другом поле ввода - клава будет убираться. Отсюда вывод - чтобы клава появлялась автоматом, поле ввода должно нести в себе какой-то стиль окна или расширенный стиль окна или стиль класса, в общем, что-то из этой области. Этот стиль окна используется при получении окном сообщения EM_SETPASSWORDCHAR при условии наличия этого самого Char. Прокурил насколько мог VCL, не смог найти место обработки этого сообщения, оно где-то глубже, чем сама VCL.

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

Решил повторить Ваш эксперимент (тоже в VCL). Кинул на форму 2 эдита. У одно из них задал PasswordChar, у другого не задавал. Сделал релиз компиляцию и запустил файл на планшете с Windows 10. Независимо где установлен фокус ввода, сенсорная клава не появляется.

Ссылка на комментарий
  • 0
В 12.12.2016 в 16:08, Lem0nti сказал:

Предлагаю такой эксперимент

Проще выложить исходники и *.exe файлы. Тогда сравнение

 

1 час назад, d7d1cd сказал:

Решил повторить Ваш эксперимент

будет более объективным. 

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

В аттаче конечный вариант моих экспериментов на эту тему. Я просто скопировал все разные поля ввода из приложения сюда. Прилагаемый скриншот чтобы было понятно какие из полей ввода - пароли.

Последний запуск был на винде 10, автовсплывание клавиатуры включено в настройках. В итоге - на паролях всплывает, в остальных - нет.

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

AutoKeyTest.rar

scr.png

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

На 10 у меня не всплывает, уточните

10 часов назад, Lem0nti сказал:

автовсплывание клавиатуры включено в настройках

это где? Клаву отключил.

Изменено пользователем GASCHE
Ссылка на комментарий
  • 0

Параметры - Устройства - Ввод - Автоматическое отображение сенсорной клавиатуры, и т.д.

http://windowsprofi.ru/wp-content/uploads/2016/06/Фото-9-11.jpg

Изменено пользователем Lem0nti
Ссылка на комментарий

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

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

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

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

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

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

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

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

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