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 17-12-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Ctrl-Intro en un TEdit

Hola Amigos !

En mi TEdit controlo tanto los eventes OnKeyDown como OnKeyPress. Quiero interceptar cuando el usuario pulsa Ctrl-Intro y lo hago bien con
Código Delphi [-]
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If (Key = VK_RETURN) and (Shift = [ssCtrl]) Then
    ...
end;
pero aunque añada Key := 0;, después de pasar por OnKeyDown me ejecuta también OnKeyPress y ahí no sé como identificar esa situación, ya que en OnKeyPress, Key no vale ni 17 (Control) ni tampoco 13 (Enter) y shift no está disponible.

Felices Fiestas !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 17-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No entiendo bien porqué precisas ambos eventos "OnKeyDown" y "OnKeyPress", pero, entiendo menos aún cómo es que tienes que comprobar "lo mismo" en los dos eventos. ¿No te bastaría con comprobar que se pulsaron las teclas CTRL + ENTER en el evento "OnKeyDown"? A más de que ya ves que en el evento "OnKeyPress" no parece usarse para esos menesteres: no cuenta, como dices, con el parámetro "Shift", por ejemplo. No sé. Tal vez no esté del todo despierto.

Lo que puedo decirte es que no parece bien la sentencia:


Código Delphi [-]
(Shift = [ssCtrl])
Creo que sería más apropiado utilizar algo así:


Código Delphi [-]
procedure TForm1.Edit1KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if ( (ssCtrl in Shift) and (Key = VK_RETURN) ) then
  begin
    ShowMessage('Pulsaste las teclas CTRL + ENTER');
    Key := 0;
  end;
end;
Puesto que la variable "Shift" es un "Set" que puede contener varios valores... no sé hasta qué punto podría funcionarte la comprobación que haces arriba, en caso, por ejemplo, de que "Shift" contuviera otros valores, puesto que entonces no sería igual a "ssCtrl", solamente. Sin embargo lo que propongo por mi parte es la comprobación mediante la pregunta "¿Está "ssCtrl" dentro de "Shift"? creo que es más correcto. Además, que no me lo invento yo, creo que la ayuda de Delphi dice algo a este respecto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 17-12-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias Dec por tus recomendaciones ...

Por qué necesito controlarlo en ambos eventos ? Pues una verdadera tontería !!

Resulta que cuando lo detecto en OnKeyDown, abro un nuevo form, y justo entonces (lo cual acepto que es una tontería ...) se produce un sonido que corresponde a no aceptar el Ctrl-Intro en el campo TEdit. Pero el usuario, cada vez que pita el ordenador se sobresaltará y dirá : "Que pasó ?"

Y eso se provoca precisamente (lo he comprobado con el debugger) porque entra en OnKeyPress y al no contemplar esa combinación de teclas emite el "clonck!". Lo mismo me pasa en cualquier otro campo (lo cual si debe de ser así), pero precisamente en este TEdit no lo quiero así porque tengo que abrir el Form !

No me sirve de nada poner Key := 0; en OnKeyDown porque de cualquier manera de entra en OnKeyPress y es ahí donde quiero interceptar la combinación de teclas para que sea 'válida' y no me produzca el sonido de error ...
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 17-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,


Cita:
Empezado por gluglu
Y eso se provoca precisamente (lo he comprobado con el debugger) porque entra en OnKeyPress y al no contemplar esa combinación de teclas emite el "clonck!".
No sé si estoy en lo cierto, pero, ¿el sonido de marras se produce con la combinación de teclas CTRL + ENTER o solamente con ENTER? Porque si es esto último valdría que "interceptaras" la tecla en el evento "OnKeyPress". De este Hilo deduzco lo que he dicho.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 17-12-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
David, gracias

No es del ENTER porque siempre lo utilizo para pasar de un campo al otro. Mi código del evento OnKeyPress es
Código Delphi [-]
procedure TBookingFrame2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   case Key of
     VK_UP     :
       begin
         SelectNext(Sender as TWinControl, False, True );
         Key := 0;
       end;
     VK_DOWN   :
       begin
         SelectNext(Sender as TWinControl, True, True );
         Key := 0;
       end;
     VK_PRIOR, VK_NEXT :
       If not Panel2.Visible then
         Panel1.SetFocus
       else
         DBGridRL1.SetFocus;
     VK_RETURN :
       If Shift = [ssCtrl] then begin
         Key := 0;
         If (Sender = EditDB1) or (Sender = EditDB2) or (Sender = EditDB3) then
           ToolButton1Click(Sender);
       end;
   end;
end;
 
procedure TBookingFrame2.FormKeyPress(Sender: TObject; var Key: Char);
begin
  If Key = #13 Then begin
    If HiWord(GetKeyState(VK_SHIFT)) <> 0 then
      SelectNext(Sender as TWinControl, False, True )
    else
      SelectNext(Sender as TWinControl, True, True );
    Key := #0;
  end;
//  If (Sender = EditDB1) or (Sender = EditDB2) or (Sender = EditDB3) then
//    Key := #0;
end;
__________________
Piensa siempre en positivo !
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 03:27:53.


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