Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007

Для этого необходимо написать процедуру-обработчик для 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;

Взято из https://forum.sources.ru