ixMike
10-08-2006, 19:23:52
Hola.
Veréis, en un programa que estoy haciendo tengo una barra de estado (TStatusBar), y en los paneles 3 y cuatro muestro el estado de las teclas BloqMaysu y BloqNum. Antes esto lo hacía con la función GetKeyState, y con un TTimer (cada 50 ms checkeaba el estado de las teclas y actualizaba la barra).
Hasta que descubrí los ganchos de teclado (Hooks). Encontré en el club una forma de hacerlos. La prueba funcionaba de maravilla, pero al ponerlo en práctica en mi programa, no funciona.
El código que tengo es este:
type
TfrmPrincipal = class (TForm)
{...}
public
Procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
end;
{...}
procedure TfrmPrincipal.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.Message=WM_HOTKEY then
begin
If GetKeyState(VK_CAPITAL)=1 then Barra.Panels[3].Text:='MAYUS' else Barra.Panels[3].Text:='';
If GetKeyState(VK_NUMLOCK)=1 then Barra.Panels[4].Text:='NUM' else Barra.Panels[4].Text:='';
end;
end;
{...}
initialization
RegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqM'), 0, VK_CAPITAL);
RegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqN'), 0, VK_NUMLOCK);
finalization
UnRegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqM'));
UnRegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqN'));
¿Alguien podría decirme qué pasa?
Gracias.
Veréis, en un programa que estoy haciendo tengo una barra de estado (TStatusBar), y en los paneles 3 y cuatro muestro el estado de las teclas BloqMaysu y BloqNum. Antes esto lo hacía con la función GetKeyState, y con un TTimer (cada 50 ms checkeaba el estado de las teclas y actualizaba la barra).
Hasta que descubrí los ganchos de teclado (Hooks). Encontré en el club una forma de hacerlos. La prueba funcionaba de maravilla, pero al ponerlo en práctica en mi programa, no funciona.
El código que tengo es este:
type
TfrmPrincipal = class (TForm)
{...}
public
Procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
end;
{...}
procedure TfrmPrincipal.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.Message=WM_HOTKEY then
begin
If GetKeyState(VK_CAPITAL)=1 then Barra.Panels[3].Text:='MAYUS' else Barra.Panels[3].Text:='';
If GetKeyState(VK_NUMLOCK)=1 then Barra.Panels[4].Text:='NUM' else Barra.Panels[4].Text:='';
end;
end;
{...}
initialization
RegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqM'), 0, VK_CAPITAL);
RegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqN'), 0, VK_NUMLOCK);
finalization
UnRegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqM'));
UnRegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqN'));
¿Alguien podría decirme qué pasa?
Gracias.