FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola,
Cita:
|
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
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 |
#4
|
||||
|
||||
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 |
#5
|
||||
|
||||
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 |
#6
|
||||
|
||||
Cita:
Simplemente pon la propiedad Interval del timer en 10 (incluso 50 0 100 debe ser suficiente). Te aseguro que el efecto es inmediato. // Saludos |
#7
|
||||
|
||||
¿Has pensado que sucede si el usuario activa otra aplicación y estando en ella cambia el estado de alguna de estas teclas? ¿Crees que tu aplicación lo detectará? Haz la prueba.
// Saludos |
|
|
|