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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-12-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Problemas con KeyDown

Hola amigos
Mi problema es el siguiente, estoy desarrollando una aplicacion que ademas de ejecutar acciones pecionando los botones de un toolbar, tambien ejecuta acciones asociadas a precionar una tecla determinada, por ejemplo F2:Ingresa, F3:modifica, F4:elimina, etc, dichas teclas las capturo en el evento keydown del Form el cual tiene activada la propieda KeyPreview:=True, para que los eventos de teclado sean capturados primero por el Form y despues por los controles del formulario. El problema es que por ejemplo al precionar al mismo tiempo F3 y F4, se ejecutan las dos acciones asociadas a cada tecla y al mismo tiempo, cada vez que se captura una tecla en el evento y que corresponde a una accion reconocida por el sistema se ejecuta el codigo correspondiente y asigno la variable key del evento a 0 (cero), para que la tecla deje de procesarse, pero como dije anteriormente si preciono 2 teclas asociadas a acciones reconocidas por el sistema, se ejecutan las 2 al mismo tiempo, como si el evento se llamara en paralelo por cada precion de una tecla, sin importar si otra tecla se esta procesando en el evento.
Existe alguna forma de que aunque se precionen 2 teclas al mismo tiempo el procesamiento o captura de la precion de dichas teclas sea efectuado no en paralelo, es decir que si preciono F3 y F4 al mismo tiempo, primero se capture la precion de una y despues de la otra, para de esta forma no sufrir problemas de colision en el codigo.

Cualquier ayuda es bien recibida

Saludos....
__________________
Un hombre inteligente aprende de los errores propios...
Un hombre sabio aprende de los errores de los demas...
Responder Con Cita
  #2  
Antiguo 29-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Código Delphi [-]
begin
if Ejecutando then Exit;
try
   Ejecutando := True;
//   todo el keyDown
finally 
  Ejecutando := False;
end;
end; // Keydown;

Esto no soluciona del todo tu problema, ya que no da preferencia a una acción sobre otra... no sé si me explico.

Otra Opción sería crear una propiedad del tipo Modo = (Modificando, Insertando, Eliminando, NoDefinido) para saber la accion en curso.

Si necesitas preferencia de una accion sobre otra, puedes hacerlo asï:
Modo = set of (Modificando, Insertando, Eliminando, NoDefinido)

en el evento OnKeyDown, asignas a Modo la acción segun la tecla pulsada. Si pulsas 2 teclas a la vez, Modo tendría los dos valores.
en el evento OnKeyUp chequeas los estados que estan activos y solo tomas el que tiene más prioridad. Algo así como:
Código Delphi [-]
begin OnKeyUp
  if (Modificando in Modo) and (Eliminando in Modo) then
       Procedimiento de Modificar; // damos prioridad a Modificar sobre Eliminar
  else....



Espero te sirva.
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 23:01:05.


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