Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как переместить панель компонентов над виртуальной клавиатурой в Windows 10

Delphi , Синтаксис , Справочник по API-функциям

Вопрос пользователя заключается в необходимости определения размеров (ширины и высоты) и положения (левой и верхней границы) виртуальной клавиатуры TabTip.exe на Windows 10. Задача состоит в том, чтобы переместить панель с компонентами таким образом, чтобы поле ввода, на которое переключился фокус ввода, находилось выше виртуальной клавиатуры. При этом работа ведётся не от имени администратора, но запущенный проект имеет права администратора.

Проблема и контекст

Начиная с Windows 10, виртуальная клавиатура TabTip.exe представлена в виде UWP-приложения, и у неё нет обычного окна, на которое можно было бы ссылаться через HWND. Это означает, что традиционные методы получения размеров и положения окна (например, FindWindow, GetWindowRect, DwmGetWindowAttribute) не работают.

Описание решения

Для получения размеров и положения виртуальной клавиатуры в Windows 10 можно использовать UI Automation. Это позволяет получить границы окна клавиатуры, но, согласно предоставленному контексту, результаты работы функций GetCurrentPropertyValue и Get_CurrentBoundingRectangle некорректно отображают размеры (левый и верхний край, ширина и высота равны 0).

Подтверждённый ответ

Использование интерфейса IFrameworkInputPaneHandler позволяет приложению получать уведомления о показе или скрытии виртуальной клавиатуры. Это дает возможность приложению корректировать отображение своего окна так, чтобы области ввода (например, текстовое поле) не были закрыты виртуальной клавиатурой.

Пример кода на Object Pascal (Delphi)

uses ..., Windows.InputPanel;

type
  TMyInputPaneHandler = class(TInterfacedObject, IFrameworkInputPaneHandler)
  public
    function GetTextFromInputPane: Boolean; stdcall: Integer;
    function ShowInputPane: Boolean; stdcall: Integer;
    function HideInputPane: Boolean; stdcall: Integer;
  end;

{ TMyInputPaneHandler }

function TMyInputPaneHandler.GetTextFromInputPane: Boolean; stdcall;
begin
  // Здесь можно обработать текст, полученный от виртуальной клавиатуры
  Result := True; // Укажите, что текст успешно обработан
end;

function TMyInputPaneHandler.ShowInputPane: Boolean; stdcall;
begin
  // Виртуальная клавиатура показана. Здесь можно переместить панель компонентов
  Result := True; // Укажите, что вы обработали событие показа клавиатуры
  // Пример перемещения панели:
  // Panel.Top := Panel.Top - Panel.Height; // Переместить панель выше
  Result := False; // Установка на True говорит о том, что вы не хотите управлять поведением ввода
end;

function TMyInputPaneHandler.HideInputPane: Boolean; stdcall;
begin
  // Виртуальная клавиатура скрыта. Здесь можно переместить панель обратно
  Result := True; // Укажите, что вы обработали событие скрытия клавиатуры
  // Пример возврата панели в исходное положение:
  // Panel.Top := Исходное Положение; // Вернуть панель в исходное положение
  Result := False; // Если вы не хотите управлять позиционированием окна при скрытии клавиатуры
end;

Для использования IFrameworkInputPaneHandler следует зарегистрировать экземпляр класса, реализующего данный интерфейс, в системе. Более подробную информацию и примеры кода можно найти в MSDN и блоге MSDN.

Альтернативный ответ

Использование ExpandEnvironmentVar и ShellExecute для запуска TabTip.exe напрямую не рекомендуется, так как это внутренние детали реализации, и использование таких методов может привести к нестабильности и проблемам совместимости.

Заключение

Для решения поставленной задачи следует использовать IFrameworkInputPaneHandler, который позволит корректно реагировать на показ и скрытие виртуальной клавиатуры и перемещать элементы интерфейса таким образом, чтобы они не были скрыты под клавиатурой.

Создано по материалам из источника по ссылке.

Вопрос связан с необходимостью перемещения панели компонентов над виртуальной клавиатурой в Windows 10, используя интерфейс `IFrameworkInputPaneHandler` для корректного отображения элементов управления при активации виртуальной кл


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:13:48/0.0043871402740479/1