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

Как заставить дополнительную клавиатуру всегда работать в режиме цифр

Delphi , ОС и Железо , Клавиши

Как заставить дополнительную клавиатуру всегда работать в режиме цифр

Для этого необходимо написать процедуру-обработчик для Application.OnMessage:


procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppOnMessage;
end;

procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
var ccode: Word;
begin
  case Msg.Message of
    WM_KEYDOWN, WM_KEYUP:
      begin
        if (GetKeyState(VK_NUMLOCK) >= 0) //NumLock не включ¸н
          and ((Msg.lparam and $1000000) = 0)
          then
        begin
          ccode := 0;
          case Msg.wparam of
            VK_HOME: ccode := VK_NUMPAD7;
            VK_UP: ccode := VK_NUMPAD8;
            VK_PRIOR: ccode := VK_NUMPAD9;
            VK_LEFT: ccode := VK_NUMPAD4;
            VK_CLEAR: ccode := VK_NUMPAD5;
            VK_RIGHT: ccode := VK_NUMPAD6;
            VK_END: ccode := VK_NUMPAD1;
            VK_DOWN: ccode := VK_NUMPAD2;
            VK_NEXT: ccode := VK_NUMPAD3;
            VK_INSERT: ccode := VK_NUMPAD0;
            VK_DELETE: ccode := VK_DECIMAL;
          end;
          if ccode <> 0 then Msg.Wparam := ccode;
        end;
      end;
  end;
end;

Программа на Delphi предназначена для обеспечения работы дополнительного (цифрового) клавиатуры в режиме числовых клавиш всегда, то есть отправлять нажатия клавиш как числа вместо их стандартных ASCII-значений.

Обзор функционирования:

  1. Метод FormCreate устанавливает глобальный обработчик сообщений для приложения с помощью свойства Application.OnMessage.
  2. Процедура AppOnMessage вызывается каждый раз, когда приложение получает сообщение. Она проверяет, является ли это сообщение нажатием клавиши (либо WM_KEYDOWN, либо WM_KEYUP) и если NumLock не включен.
  3. Если эти условия выполняются, то она проверяет, какой конкретная клавиша была нажата, и заменяет ее стандартное ASCII-значение соответствующим числовым значением клавиатуры numbpad. Например, если была нажата клавиша HOME, то будет обработано как клавиша NUMPAD7.

Альтернативное решение с использованием более объектно-ориентированного подхода:

Вместо модификации глобального обработчика сообщений можно создать пользовательский компонент, наследуясь от TComponent и переопределяя метод ProcessMessage. Это позволит упаковать логику обработки числовых клавиш в компонент, который может быть использован повторно.

Пример реализации:

type
  TNumericKeypadHandler = class(TComponent)
  private
    FNumLockEnabled: Boolean;
  public
    procedure ProcessMessage(var Message: TMessage);
  end;

implementation

procedure TNumericKeypadHandler.ProcessMessage(var Message: TMessage);
begin
  if (Message.Msg = WM_KEYDOWN) or (Message.Msg = WM_KEYUP) then
  begin
    if not FNumLockEnabled then
    begin
      case Message.WParam of
        VK_HOME: Message.WParam := VK_NUMPAD7;
        VK_UP: Message.WParam := VK_NUMPAD8;
        VK_PRIOR: Message.WParam := VK_NUMPAD9;
        VK_LEFT: Message.WParam := VK_NUMPAD4;
        VK_CLEAR: Message.WParam := VK_NUMPAD5;
        VK_RIGHT: Message.WParam := VK_NUMPAD6;
        VK_END: Message.WParam := VK_NUMPAD1;
        VK_DOWN: Message.WParam := VK_NUMPAD2;
        VK_NEXT: Message.WParam := VK_NUMPAD3;
        VK_INSERT: Message.WParam := VK_NUMPAD0;
        VK_DELETE: Message.WParam := VK_DECIMAL;
      end;
    end;
  end;
end;

var
  NumericKeypadHandler: TNumericKeypadHandler;

В этом реализации создается экземпляр TNumericKeypadHandler и присваивается обработчику событий сообщений формы. Это позволит компоненту обрабатывать все сообщения о нажатии клавиш для приложения.

Обратите внимание, что в обоих реализациях необходимо также проверять, включен ли NumLock или нет, перед изменением сообщения, как показано в оригинальном коде.

Для заставления дополнительной клавиатуры работать в режиме цифр необходимо написать процедуру-обработчик для Application.OnMessage, которая изменяет код клавиш NumPad на соответствующие символы.


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

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




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


:: Главная :: Клавиши ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-14 23:07:12/0.0063939094543457/0