Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 06-01-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por FGarcia Ver Mensaje
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

Código Delphi [-]
GetKeyState and 128

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
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Interrumpir proceso Jose_Pérez Varios 3 07-01-2009 00:23:02
Duda sobre variable en un Bucle Repeat gerupc Varios 9 21-07-2007 02:44:34
crear label por codigo en un ciclo for.. las beses de el ciclo sakuragi .NET 3 29-09-2005 05:04:29
Interrumpir un for Majo Varios 10 31-03-2004 21:37:53
Interrumpir un procedimiento almacenado mlara Firebird e Interbase 1 30-01-2004 09:59:48


La franja horaria es GMT +2. Ahora son las 02:29:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi