Cita:
Empezado por FGarcia
Segun que funciona en los bucles, pero no, no me ha funcionado, es mas no logro entender la logica: GetKeyState regresa un smallint que es el equivalente de la tecla pulsada pero ¿que hace el AND 128 = 128?
|
Para saber si una tecla está presionada o no, lo que importa es la información en el último bit del número que devuelve GetKeyState. La operación
aisla ese último bit ya que el 128 tiene 1 en el bit 7 y 0 en todos los demás (la operación AND es una operación booleana bit a bit).
En otras palabras, el resultado de la operación sólo puede ser 128 ó 0. De ahí la comparación con 128.
Yo he hecho la prueba y funciona si añades a tu ciclo una llamada a Application.ProcessMessages:
Código Delphi
[-]
repeat
Application.ProcessMessages;
....
if GetKeyState(VK_ESCAPE) and 128 = 128 then
break;
until Num = Terminador
aunque yo lo pondría así:
Código Delphi
[-]
repeat
Application.ProcessMessages;
....
until (Num = Terminador) or (GetKeyState(VK_ESCAPE) and 128 = 128)
Agrego
Otra cosa: el operador
and tiene precedencia sobre el operador
=. Por tanto, la expresión
Código Delphi
[-]
GetKeyState(VK_ESCAPE) and 128 = 128
es equivalente a
Código Delphi
[-]
(GetKeyState(VK_ESCAPE) and 128) = 128
De manera que no es que la condición siempre sea verdadera.
// Saludos