![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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: 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. |
|
#2
|
||||
|
||||
|
Saludos dec!
Justo vi tu respuesta despues de publicar la mia y quería preguntarte, ¿Te devuelve a ti "GetKeyState" un valor entre 0 y 1 al comprobar el NumLock? Porque tengo el mismo sistema operativo que tu (XP2) y la misma versión de Delphi (v7) y lo que me devuelve, en realidad, es un número entero negativo (-127 y -128, según esté o no activo), y al mirar la ayuda sobre esta función comenta que lo que cambia al activar o desactivar es el bit menos significativo (por eso da un número negativo). Chao! |
|
#3
|
||||
|
||||
|
Hola,
Cita:
|
|
#4
|
||||
|
||||
|
Gracias a los dos por responderme..... problema resuelto. Eso si la funcion de DEC no me funciona, sigue como estaba antes... tuve que sumarle 127 como decia jmariano y asi fue como me trabajo.
Saludos y Gracias
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces. Sr.Scorpion |
|
#5
|
||||
|
||||
|
Bueno al final tuve que hacer dos procedimientos... uno para el estado de las teclas y otro para cuando se presionan. En el evento OnShow de la Forma principal llamo al procedimiento KeyState.. el cual se ejecuta solamente una vez.
Código:
procedure TMain.KeyState(); begin If GetKeyState(VK_NUMLOCK) = 1 Then StatusBar.Panels[2].Style:= psText else StatusBar.Panels[2].Style:= psOwnerDraw; If GetKeyState(VK_CAPITAL) = 1 Then StatusBar.Panels[3].Style:= psText else StatusBar.Panels[3].Style:= psOwnerDraw; If GetKeyState(VK_SCROLL) = 1 Then StatusBar.Panels[4].Style:= psText else StatusBar.Panels[4].Style:= psOwnerDraw; end; Código:
procedure TMain.KeyPressed(Key: DWORD); begin If Key = VK_NUMLOCK then if (GetKeyState(VK_NUMLOCK) + 127) = 0 Then StatusBar.Panels[2].Style:= psText else StatusBar.Panels[2].Style:= psOwnerDraw; If Key = VK_CAPITAL then if (GetKeyState(VK_CAPITAL) + 127) = 0 Then StatusBar.Panels[3].Style:= psText else StatusBar.Panels[3].Style:= psOwnerDraw; If Key = VK_SCROLL then if (GetKeyState(VK_SCROLL) + 127) = 0 Then StatusBar.Panels[4].Style:= psText else StatusBar.Panels[4].Style:= psOwnerDraw; end;
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces. Sr.Scorpion |
|
#6
|
||||
|
||||
|
No entiendo bien por qué la discrepancia en el funcionamiento. A mi me funciona como dice dec. Ahora, según la documentación, la comparación tendría que hacerse así:
Por otra parte, si lo que se desea es mostrar el estado de estas teclas en una barra de estado, yo me olvidaría del OnKeyDown y pondría un Timer que se ejecute cada 10 ms en donde haría la comprobación. De esta manera, sólo tienes que poner el código en un lugar y además el estado se reflejará correctamente aun cuando el estado de la tecla cambie por razones distintas a oprimir la tecla (al menos a mi me pasa cada tanto que la tecla NumLock se apaga luego de correr alguna aplicación). // Saludos |
|
#7
|
||||
|
||||
|
Esa sentencia merece un aplauso y una reverencia..... esto hace que el procedimiento sea unico y no haya que introducirle parametros de tecla. Por lo tanto el procedimiento quedaria asi...
Código:
procedure TMain.KeyState(); begin If GetKeyState(VK_NUMLOCK) and 1 = 1 Then StatusBar.Panels[2].Style:= psText else StatusBar.Panels[2].Style:= psOwnerDraw; If GetKeyState(VK_CAPITAL) and 1 = 1 Then StatusBar.Panels[3].Style:= psText else StatusBar.Panels[3].Style:= psOwnerDraw; If GetKeyState(VK_SCROLL) and 1 = 1 Then StatusBar.Panels[4].Style:= psText else StatusBar.Panels[4].Style:= psOwnerDraw; end; Saludos y Gracias
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces. Sr.Scorpion |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|