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 04-06-2007
tonyluna36 tonyluna36 is offline
Registrado
 
Registrado: dic 2006
Posts: 2
Poder: 0
tonyluna36 Va por buen camino
Tecla presionada continuamente

Hola.

Por ejemplo en un memo, cuando dejas presionada una tecla, se generan repeticiones de la misma hasta que la sueltas. ¿ Existe alguna manera de evitar esto ?. Es decir si presionas una tecla, que se escriba una vez, y si sigue pulsada la tecla que no se escriba más.

Gracias
Salu2.
Responder Con Cita
  #2  
Antiguo 04-06-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Wink

lo que podrias hacer es utilizar una variable "global" de tipo char y preguntar si el valor de esa variable es igual a la tecla pulsada, entonces que el valor de la tecla pulsada sea 0, osea no se escriba nada, todo esto en el evento keypress..

Código Delphi [-]
var
  tecla : char;
 
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
     IF(key=#32)OR(Key=#13) THEN Exit; //Si Quieres que se presionen  
                                                       //espacios o la tecla enter.
     IF tecla= Key THEN
        key:=#0
     ELSE
        tecla:=key;
end;

lo malo es que existen palabras que poseen letreras repetitivas como "coordinación ".. bueno quizas algun compañero nos pueda dar una mejor respuesta.. bueno espero haberte ayudado en algo...
Responder Con Cita
  #3  
Antiguo 04-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Windows tiene esa opción para el teclado en el panel de control, puede que capture esos mensajes antes que tu aplicación, habría que hacer pruebas. Ese valor se rescata desde el registro de windows, las claves interesantes son :

- AutoRepeatDelay: (valor 1000 milisegundos). En el panel de control -> Teclado, se corresponde con "Retraso de la repetición".

- AutoRepeatRate: (valor 500 milisegundos). Corresponde a "Velocidad de repeticion".

No me gustaría modificar el registro de windows, ya que afectaría a todo programa, aunque seria el proceso mas simple, poner a AutoRepeatDelay, por ejemplo a 10.000, de forma que debes mantener presionada la tecla 10 segundos para que empiece a repetirse automaticamente.

Desconozco otro metodo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 04-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Creo que puedo estar matando moscas a cañonazos, pero podemos usar un hook.
Código Delphi [-]
var
  // Esta es una variable global
  Hook: HHook;

function KeyboardProc(Code: Integer; WParam, LParam: DWORD): LRESULT; stdcall;
begin
  if Code = HC_ACTION then
  begin
    // Aqui comprobamos si es una pulsacion y si ya estaba pulsada antes
    if LParam and $C0000000 = $40000000 then
    begin
      // y si ya estaba pulsada con antes, ignoramos la repeticion 
      Result:= 1;
      Exit;
    end;
  end;
  Result := CallNextHookEx(Hook, Code, WParam, LParam);
end;

Para instalar y desinstalar el hook usamos las siguientes instrucciones:
Código Delphi [-]
// Para instalar. Limitamos el hook al thread actual
  Hook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, 0, GetCurrentThreadId);
// Para desinstalar
  if Hook <> 0 then UnhookWindowsHookEx(Hook);

Coloca esas dos instrucciones en el lugar adecuado, en los eventos OnCreate y OnClose, por ejemplo, o en sección intialization/finalization.
Código Delphi [-]
initialization
  Hook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, 0, GetCurrentThreadId);
finalization
  if Hook <> 0 then UnhookWindowsHookEx(Hook);
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Medir fuerza de una tecla presionada en java rls JAVA 6 08-04-2007 01:35:00
Reproducir continuamente mediaplayer ojimenezg2000 Varios 2 06-05-2006 13:58:55
Tecla presionada en un formulario Dexter182 Varios 5 15-07-2005 03:33:16
Emular Tecla Insert Presionada marceloalegre Varios 1 31-05-2005 17:32:51
Reconocer Tecla Presionada arturoconde Oracle 0 22-03-2005 15:48:40


La franja horaria es GMT +2. Ahora son las 17:16:12.


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