Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejecutar Procedimiento con Tecla ENTER (https://www.clubdelphi.com/foros/showthread.php?t=94113)

donpedro 07-08-2019 22:03:13

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.

hal1967 07-08-2019 22:18:39

Revisa las propiedades del Botón a ver si tienes "default" colocalo en true (no estoy seguro si requieres que esté modal el formulario)

Gregorio Cíber 07-08-2019 22:35:04

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.

donpedro 07-08-2019 22:57:03

Solucionado
 
Gracias por la ayuda brindada. Me arrojaron luz

La solucion fue llamar el procedimiento del boton:

Código Delphi [-]
Button1Click(sender)

dec 08-08-2019 09:06:12

Hola a todos,

Cita:

Empezado por donpedro (Mensaje 533077)
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();

newtron 08-08-2019 09:55:22

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

Neftali [Germán.Estévez] 08-08-2019 10:02:43

Cita:

Empezado por dec (Mensaje 533080)
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...:(:(

donpedro 08-08-2019 17:28:48

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....

dec 11-08-2019 14:58:56

Hola a todos,

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 533083)
+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. :-)

donpedro 11-08-2019 15:53:53

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

dec 11-08-2019 20:39:31

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.

Teto10 02-09-2019 18:51:50

Cita:

Empezado por Gregorio Cíber (Mensaje 533076)
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


La franja horaria es GMT +2. Ahora son las 10:49:48.

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