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

Оперировать с цифровой частью клавиатуры всегда как будто NumLock занят

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

Оперировать с цифровой частью клавиатуры всегда как будто NumLock занят

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

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 not active} and
           ((Msg.lParam and $1000000) = 0)  {not a gray key} 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; {Case}
           if ccode <> 0 then
             Msg.wParam := ccode;
         end; {If}
       end; {Case Msg.Message}
   end; {Case}
 end;

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

Перевод контента на русский язык:

Это фрагмент кода Delphi, который имитирует поведение клавиши NumLock на клавиатуре. Когда клавиша NumLock не активна (т.е., она выключена), код перехватывает определенные события нажатия клавиш и заменяет их эквивалентными кодами клавиш цифровой панели.

Расшифровка того, что код делает:

  1. Процедура AppOnMessage вызывается каждый раз, когда приложению отправляется сообщение, например, при нажатии или отпускании клавиши.
  2. Процедура проверяет, является ли NumLock-ключ неактивным (т.е., выключенным) путем вызова GetKeyState(VK_ NUMLOCK) и проверки результата, равного или больше 0.
  3. Если NumLock-ключ выключен, код проверяет, соответствует ли событие нажатия клавиши одному из следующих ключей: HOME, UP, PRIOR, LEFT, CLEAR, RIGHT, END, DOWN, NEXT, INSERT или DELETE.
  4. Если найдено совпадение, код заменяет оригинальный код клавиши на соответствующий код клавиши цифровой панели (например, VK_ NUMPAD7 для HOME становится VK_ 7).
  5. Модифицированный код клавиши затем отправляется приложению как если бы это было оригинальное событие нажатия клавиши.

Процедура FormCreate настраивает процедуру AppOnMessage в качестве обработчика сообщений для приложения, чтобы перехватывать и обрабатывать события нажатия клавиш соответственно.

Альтернативным решением может быть использование встроенных функций Delphi по обработке ввода клавиатуры, таких как настройка пользовательского формата клавиатуры или использование компонента Keyboard. Это позволит обрабатывать ввод клавиатуры без необходимости имитации нажатия клавиш.

Вот пример настройки пользовательского формата клавиатуры:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Keyboard.Layout := 'Custom';
end;

procedure TForm1.KeyboardLayoutChanging(Sender: TObject; var Layout: string);
begin
  if (GetKeyState(VK_NUMLOCK) >= 0) then
    Layout := 'Standard'
  else
    Layout := 'CustomNumLock';
end;

function TForm1.GetCustomNumLockLayout(): string;
begin
  Result := 'HOME=VK_7, UP=VK_8, PRIOR=VK_9' +
             ', LEFT=VK_4, CLEAR=VK_5, RIGHT=VK_6' +
             ', END=VK_1, DOWN=VK_2, NEXT=VK_3' +
             ', INSERT=VK_0, DELETE=VK_DECIMAL';
end;

В этом примере событие KeyboardLayoutChanging используется для динамического переключения между стандартным форматом клавиатуры и пользовательским форматом при изменении состояния NumLock-ключа. Функция GetCustomNumLockLayout возвращает строку, которая определяет пользовательский формат клавиатуры для состояния NumLock.

В статье описывается способ программирования, который позволяет всегда учитывать состояние кнопки NumLock на клавиатуре и автоматически заменять символы на цифровой панели на соответствующие символы на стандартной панели.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:45:31/0.0057899951934814/1