Hola,
No es preciso que lo hagas en ningún evento específico, aunque puedes hacerlo así si es mejor o lo prefieres. Personalmente estoy utilizando un procedimiento para hacer lo que tú precisas y parte del procedimiento es este:
Código Delphi
[-]
if GetKeyState(VK_CAPITAL) = 1 then
bEstado.Panels[8].Text := rsBloqMayus
else
bEstado.Panels[8].Text := '';
if GetKeyState(VK_NUMLOCK) = 1 then
bEstado.Panels[9].Text := rsBloqNum
else
bEstado.Panels[9].Text := '';
if GetKeyState(VK_SCROLL) = 1 then
bEstado.Panels[10].Text := rsScrolLock
else
bEstado.Panels[10].Text := '';
Puedo llamar al procedimiento desde "OnKeyDown", pero, también desde cualquier otro lugar, ya que en el mismo no se precisa de los parámetros que proporciona "OnKeyDown", por poner un caso. En cuanto a que no te funcione "VK_NUMLOCK"... lo único que puedo decirte es que en Delphi 7 y Windows Xp SP2 sí que funciona correctamente.