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 07-08-2019
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Ejecutar Procedimiento con Tecla ENTER

Hello, bendiciones para todos.
Estoy trabajando con Delphi 2009 y Sql Server 2012.

Tengo un modulo de inicio de sesion (login). En el boton aceptar tengo el procedimiento para validar los datos con la base de datos y dar entrada al sistema si los datos son correctos.

Lo que deseo hacer es que cuando coloque la contraseña al presionar ENTER valide los datos sin tener que hacer clic en el boton aceptar.

Lo que no quiero es pegar el codigo que tengo en el boton en el evento OnKeyPress. Me gustaria saber si puedo llamar el procedimiento del boton desde el evento OnKeyPress.

Espero haberme explicado...

Gracias de antemano por la ayuda brindada.
Responder Con Cita
  #2  
Antiguo 07-08-2019
hal1967 hal1967 is offline
Miembro
 
Registrado: feb 2012
Posts: 32
Poder: 0
hal1967 Va por buen camino
Revisa las propiedades del Botón a ver si tienes "default" colocalo en true (no estoy seguro si requieres que esté modal el formulario)
Responder Con Cita
  #3  
Antiguo 07-08-2019
Gregorio Cíber Gregorio Cíber is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Gregorio Cíber Va por buen camino
A ver si te sirve esto

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then 
    btn_Aceptar.Click
  else
    inherited; 
end;

Saludos.
Responder Con Cita
  #4  
Antiguo 07-08-2019
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Solucionado

Gracias por la ayuda brindada. Me arrojaron luz

La solucion fue llamar el procedimiento del boton:

Código Delphi [-]
Button1Click(sender)
Responder Con Cita
  #5  
Antiguo 08-08-2019
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 a todos,

Cita:
Empezado por donpedro Ver Mensaje
Gracias por la ayuda brindada. Me arrojaron luz

La solucion fue llamar el procedimiento del boton:

Código Delphi [-]
Button1Click(sender)
No es buena idea ejecutar los eventos de los componentes directamente: es mejor sacar el código que sea menester del evento en cuestión, situarlo aparte, en otro procedimiento, función o método, y, llamar a este último procedimiento, función o método, en lugar de al propio evento. Entre otras cosas, hacer lo primero nos obligaría a estar pendientes del argumento "Sender" del evento, entre otros posibles argumentos, que, acaso no sean sencillos de proporcionar.

En todo caso, si quieres ejecutar el código del evento "OnClick" de un botón, y, no quieres separar el código del evento (que es lo recomendado), en lugar de ejecutar el evento en cuestión, usa el método "Click" del botón cuyo "OnClick" quieras ejecutar, por ejemplo:

Código Delphi [-]
Button1.Click();
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 08-08-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Por otro lado, si cambias el TButton por un TBitBtn puedes poner la propiedad "Default" a True (como comentaba hal1967) y ese trabajo te lo hace de forma automática.


Saludos
__________________
Be water my friend.
Responder Con Cita
  #7  
Antiguo 08-08-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por dec Ver Mensaje
No es buena idea ejecutar los eventos de los componentes directamente: es mejor sacar el código que sea menester del evento en cuestión, situarlo aparte, en otro procedimiento, función o método, y, llamar a este último procedimiento, función o método, en lugar de al propio evento. Entre otras cosas, hacer lo primero nos obligaría a estar pendientes del argumento "Sender" del evento, entre otros posibles argumentos, que, acaso no sean sencillos de proporcionar.

+1
Se nota que habla la voz de la experiencia...


Si te acostumbras a llamar a los eventos (en los que se ha añadido código) directamente desde otros puntos del programa, lo que pasa luego es que pasado un tiempo empiezan a pasar "cosas raras" y resulta que cuando revisas la ejecución del programa te encuentras que "saltan eventos cuando no debería".

Es decir, en este caso uno espera que cuando el código llega al evento Button1Click, es porque alguien ha pulsado un click de ratón. Luego investigas y resulta que ha sido al pulsar una tecla. Si esto lo generalizas al final te trae dolores de cabeza...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 08-08-2019
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Lo tomare en cuenta

Tomare en cuenta sus sugerencias, en especial la de Dec, de crear un procedimiento a parte o una funcion o un metodo.

Gracias....
Responder Con Cita
  #9  
Antiguo 11-08-2019
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 a todos,

Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
+1
Se nota que habla la voz de la experiencia...


Si te acostumbras a llamar a los eventos (en los que se ha añadido código) directamente desde otros puntos del programa, lo que pasa luego es que pasado un tiempo empiezan a pasar "cosas raras" y resulta que cuando revisas la ejecución del programa te encuentras que "saltan eventos cuando no debería".

Es decir, en este caso uno espera que cuando el código llega al evento Button1Click, es porque alguien ha pulsado un click de ratón. Luego investigas y resulta que ha sido al pulsar una tecla. Si esto lo generalizas al final te trae dolores de cabeza...
Mejor explicado imposible. :-)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 11-08-2019
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Me he llevado de sus sugerencias. He creado un procedimiento aparte. Coloco el codigo para ver si lo hice correctamente

Código Delphi [-]
procedure Tfrmlogin.acceso();
 begin

(* Con este codigo validamos y verificamos si el usuario introduce correctamente
   los datos para logearse en el sistema. Tambien si el usuario introduce tres veces
   los datos incorrectos el sistema automaticamente se cerrara *)

        With Qlogin do
    begin
        close;
        SQL.Clear;
        SQL.Add('SELECT * FROM EMPLEADOS, PERFILES WHERE USERNAME = ' + '''' + DBusuario.Text + '''');
        SQL.Add('AND CLAVE='+''''+DBclave.Text+'''');
        Open;
            if (RecordCount > 0) AND (FieldByName('estado').AsString='A')  then
        begin
                with Frmprincipal do
            begin
                Barraestado.panels[0].Text:=fieldbyname('username').asstring +'     '+'('+fieldbyname('nombres').AsString +')';
                Barraestado.panels[1].Text:=fieldbyname('perfil').asstring;
                Barraestado.panels[2].Text:=fieldbyname('numero doc').asstring;
                id.Caption:=fieldbyname('id perfil').AsString;
            end;
                Frmlogin.Hide;
                Frmprincipal.Show;
                COUNT:=0;
        end
          else
          begin
                count:=count+1;
                MESSAGEDLG('NO TIENE ACCESO, DATOS INCORRECTOS / USUARIO INACTIVO O RETIRADO',MTERROR,[MBOK],0);
                DBusuario.Clear;
                DBclave.Clear;
                DBusuario.SetFocus;
          end;
                if COUNT=3 then
                    if MESSAGEDLG(INTTOSTR(COUNT)+ ' ' + 'INTENTOS ERRONEOS, EL SISTEMA SE CERRARA POR MOTIVOS DE SEGURIDAD.',MTERROR,[MBOK],0)=MrOk then
                    Application.Terminate;
    end;

 end;

Gracias por la ayuda brindada
Responder Con Cita
  #11  
Antiguo 11-08-2019
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 a todos,

En principio, se trata de no depender del evento en cuestión, es decir, si el método que has puesto arriba no depende de evento alguno, entonces funcionará como se espera, independientemente de que se le ejecute desde el evento "OnClick" de un botón o desde cualquier otro sitio.

¿Podría aún irse un poco más allá? Lo diré sólo para hacerte pensar acaso... ahora mismo tu método puede no depender de un evento, pero, se trata de un método del formulario "Tfrmlogin", de modo que, en cierta medida, depende del formulario en cuestión.

Ya depende de ti, o sea, de si estimas oportuno "separar" aún más el código en cuestión, por ejemplo, si fuese posible, podría ponerse dentro de un procedimiento en unidad aparte, y, bastaría con incluir dicha unidad en el formulario "Tfrmlogin" para utilizar el procedimiento en cuestión.

De esa forma, podría también incluirse la unidad en cuestión en cualquier otro formulario, unidad, etc.

P.S. Tal vez en este caso particular no sea necesario hacer esto último, puesto que en el método que has preparado (al menos ya separado del evento), cambias componentes que se encuentran en el formulario "Tfrmlogin", etc. En este caso particular tal vez no sea siquiera buena idea separar más el código, pero, espero que cogido la idea: separar, abstraer nuestro código cuanto sea posible, de forma que se pueda mantener y reutilizar más o menos sencillamente.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 02-09-2019
Teto10 Teto10 is offline
Miembro
 
Registrado: sep 2019
Posts: 10
Poder: 0
Teto10 Va por buen camino
Cita:
Empezado por Gregorio Cíber Ver Mensaje
A ver si te sirve esto

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then 
    btn_Aceptar.Click
  else
    inherited; 
end;

Saludos.
Hola amigo, este codigo que compartieron funciona muy bien para la tecla enter se ejecute
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
Tecla Tab y Enter!! feliz-58 Varios 4 14-09-2012 08:28:47
Tecla Enter kokele OOP 7 25-11-2010 12:00:57
Tecla Enter en un TMEMO seb@ OOP 4 23-05-2008 15:15:06
Cambiar la tecla TAB por la tecla ENTER al pasar de controles dec Trucos 0 30-06-2006 13:43:03
Tecla ENTER scooterjgm OOP 12 16-09-2005 18:59:40


La franja horaria es GMT +2. Ahora son las 00:56:13.


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