Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Al pulsar Enter en un boton funciona como Tabulador (https://www.clubdelphi.com/foros/showthread.php?t=75613)

weke 07-09-2011 13:33:02

Al pulsar Enter en un boton funciona como Tabulador
 
Buenas tardes,
en una aplicación he detectado que en algunos botones, cuando pulso Enter para ejecutar el evento OnClick del propio botón me hace como si hubiera pulsado la tecla Tab y se me va el foco al siguiente TabOrder.

He puesto en el evento OnKeyPress del botón y en el FormKeyPress el siguiente código y no hace ni caso, como si hubiera pulsado la tecla tabulador y no se ejecuta nunca.

if (key = #13) then
Boton.Click;

Tengo varios controles de las teclas F12, F5, etc... y me funcionan correctamente.

Necesito que cuando pulse el Enter en los botones haga como el click en lugar de que se me cambie el foco.

Muchas gracias de antemano.
Un saludo.

newtron 07-09-2011 13:41:53

Cita:

Empezado por weke (Mensaje 411120)
Necesito que cuando pulse el Enter en los botones haga como el click en

Ese es el funcionamiento normal de los botones a no ser que tengas un BitBtn por ejemplo que esté la propiedad default en on y se ejecute ese botón al pulsar enter. ¿No estarás interceptando por algún sitio la pulsación del enter y cambiando su funcionamiento?

ecfisa 07-09-2011 14:07:51

Hola weke.

Me inclino a pensar en la segunda opción que te dá newtron.
Primero que nada revisá si no tenés asignado algún procedimiento al evento OnMessage de la clase TApplication.

Saludos.

weke 07-09-2011 15:44:00

Muchas gracias por responder tan rápido.

He revisado el código y controlo en el formulario no controlo la tecla enter, sin embargo en muchos TEdit si lo hago y funcionan correctamente posicionando el foco donde le indico y haciendo las operaciones indicadas.

Los botones que utilizo son los TJvXPButton de JVCL, de hecho, en el resto de pantallas utilizo los mismos botones y la funcionalidad la hace bien pero en una pantalla en concreto la funcionalidad habitual pasa de ella y hace como si pulsara el Tabulador.

He puesto un boton nuevo y me hace lo mismo. Lo unico que se me ocurre es que sea alguna propiedad del panel en el que se encuentra o del propio formulario, sigo investigando a ver si se me ha pasado alguna propiedad.

Un saludo.

ecfisa 07-09-2011 15:55:19

Hola weke.

Indudablemente la diferencia de comportamiento es debido al uso del componente TJvXPButton.

El TButton ni siquiera se vé afectado cambiando el comportamiento de la tecla enter en el evento OnKeyPress del form , mediante por ejemplo:
Código Delphi [-]
// En el form: KeyPreview:= True
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
  begin
    Key:= #0;
    Perform(WM_NEXTDLGCTL,0,0);
  end;
end;

Es por eso que te sugerí revisar el evento OnMessage, ya que para lograr el comportamiento que describis es necesario hacer algo como:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := EnterATab; 
end;
...
procedure TForm1.EnterATab(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.Message = WM_KEYDOWN then
  begin
    if Msg.wParam = VK_RETURN then
      Keybd_event(VK_TAB, 0, 0, 0);
  end; 
end;

Saludos.

weke 07-09-2011 16:59:08

ecfisa, he revisado el código y en ningún momento se hace nada para alterar lo que me indicas.

Lo extraño es que en el resto de pantallas que utilizo estos mismos botones no cambia la funcionalidad y al pulsar Enter se ejecuta el evento Onclick de los botones. He revisado las propiedades del formulario y del panel y son iguales. La pantalla en cuestión la abro desde la pantalla principal de la aplicación.

Un detalle que me acabo de percatar. En los TEdits no controlo si es la tecla Enter y sin embargo también me actua como si fuera Tabulador. Tiene que ser alguna opción general y no del botón.

Sigo investigando. Muchas gracias de nuevo y un saludo.

weke 08-09-2011 10:40:01

Por fin ayer tarde encontré el porqué del funcionamiento del Enter.

Es una aplicación que no he hecho yo y estaba cambiando la parte gráfica cuando me encontré con este problema. Pues la solución es que utilizaron un componente de las JVCL que hace precisamente esto, que el Enter se comporte como el Tabulador a piñón sin hacer caso a nada más. No estaba visible y no lo localicé hasta que empecé a mirar componente a componente a ver las propiedades de cada uno y me topé con este componente, que además estaba detrás de otro y no lo podía ver.

Muchas gracias de nuevo por vuestra ayuda.
Un saludo.

newtron 08-09-2011 11:00:57

Cita:

Empezado por weke (Mensaje 411235)
...un componente de las JVCL que hace precisamente esto, que el Enter se comporte como el Tabulador a piñón sin hacer caso a nada más

Curioso componente.

weke 12-09-2011 19:04:01

Buenas tardes,
el componente en cuestión es el "TJvEnterAsTab" y está en la pestaña "Jv Non-Visual", por si a alguien le interesa este funcionamiento.

Un saludo.


La franja horaria es GMT +2. Ahora son las 06:01:02.

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