Программа на Delphi предназначена для обеспечения работы дополнительного (цифрового) клавиатуры в режиме числовых клавиш всегда, то есть отправлять нажатия клавиш как числа вместо их стандартных ASCII-значений.
Обзор функционирования:
Метод FormCreate устанавливает глобальный обработчик сообщений для приложения с помощью свойства Application.OnMessage.
Процедура AppOnMessage вызывается каждый раз, когда приложение получает сообщение. Она проверяет, является ли это сообщение нажатием клавиши (либо WM_KEYDOWN, либо WM_KEYUP) и если NumLock не включен.
Если эти условия выполняются, то она проверяет, какой конкретная клавиша была нажата, и заменяет ее стандартное ASCII-значение соответствующим числовым значением клавиатуры numbpad. Например, если была нажата клавиша HOME, то будет обработано как клавиша NUMPAD7.
Альтернативное решение с использованием более объектно-ориентированного подхода:
Вместо модификации глобального обработчика сообщений можно создать пользовательский компонент, наследуясь от TComponent и переопределяя метод ProcessMessage. Это позволит упаковать логику обработки числовых клавиш в компонент, который может быть использован повторно.
В этом реализации создается экземпляр TNumericKeypadHandler и присваивается обработчику событий сообщений формы. Это позволит компоненту обрабатывать все сообщения о нажатии клавиш для приложения.
Обратите внимание, что в обоих реализациях необходимо также проверять, включен ли NumLock или нет, перед изменением сообщения, как показано в оригинальном коде.
Для заставления дополнительной клавиатуры работать в режиме цифр необходимо написать процедуру-обработчик для Application.OnMessage, которая изменяет код клавиш NumPad на соответствующие символы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.