PDA

Ver la Versión Completa : GetKeyState


ixMike
11-09-2006, 18:33:49
Hola,

hace tiempo tuve un problema con un HotKey que utilizaba para saber el estado de las teclas BloqMayus y BloqNum (este es el hilo (http://www.clubdelphi.com/foros/showthread.php?t=34478)).

El caso es que mi código no tenía fallos (el que pusieron tampoco), sino que el fallo estaba en mi comprobación. Para saber si estaban activadas, yo ponía


If GetKeyState(VK_CAPITAL)=1 then Barra.Panels[3].Text:='MAYUS' else Barra.Panels[3].Text:='';


Tras varias comprobaciones descubrí que el fallo era GetKeyState, que no devolvía el estado real de la tecla.

Lo resolví cambiando la comprobación (si se pulsaba la tecla y el texto estaba mostrado, se quitaba, sino se mostraba).

El caso es que en el programa tengo un TNMemo, derivado de TMemo al que añadí la propiedad CharCase (que se encuentra ya en TCustomEdit). Y el problema está en que si tengo el BloqMayus activado el texto se sigue escribiendo en minúsculas (pero no si puslo la tecla Shift).

¿El problema es del CharCase o que el componente escribe mayúsculas según GetKeyState?

Gracias desde ya

dec
11-09-2006, 18:58:52
Hola,

El "problema" que comentas yo lo achacaría al "CharCase". En cuanto a la comprobación del resultado de "GetKeyState", ha de hacerse como Román indica aquí (http://www.clubdelphi.com/foros/showpost.php?p=101318&postcount=10). Es un mensaje recogido de este Hilo (http://www.clubdelphi.com/foros/showthread.php?t=24214), donde se trató extensamente el tema que te ocupa. Podrías echarle un vistazo. Creo que te interesaría. ;)

Northern
11-09-2006, 19:06:37
Si miras la ayuda de GetKeyState te dice que si el "bit" más significativo está a 1 la tecla está pulsada y que si el bit menos significativo está a 1 la tecla está actvia (las teclas con luz).

Debería ser if HiByte(GetKeyState(vk_anyKey)) <> 0 then pulsada y if LowByte(GetKeyState(VK_NUMLOCK)) <> 0 then teclaactiva

....

Creo que es así pero no estoy seguro :confused:

ixMike
13-09-2006, 12:10:32
Dec, gracias por el enlace al hilo, era justo lo que me pasaba (StatusBar, BloqMayus...), pero te equivocabas con lo del CharCase, pues he podido comprobar que el fallo estaba en GetKeyState (que no lo usaba correctamente). De todas formas llegué a otra solución (quizás un poco chapucera).

Y, Northern, probaré tu código, a ver si reduche mi chapucería.

Gracias