Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   tab que numero de tecla es (https://www.clubdelphi.com/foros/showthread.php?t=18974)

JODELSA 28-02-2005 22:36:32

tab que numero de tecla es
 
hola!

En mis aplicaciones utilizo la tecla Enter para validar y moverse al siguiente campo, de esta manera:

if key = 13 then
begin
.....
....
end;

Quiero Hacer lo mismo pero con la tecla TAB, pero no se cual es el número de esta, si hay algun lugar donde puedo encontrar esto valores diganmelo.

roman 28-02-2005 22:40:14

9

// Saludos

marcoszorrilla 28-02-2005 22:47:38

Este ejemplo aunque no funciona con todas las teclas, en concreto con TAB no va, pero te puede servir para la mayoría.

Código Delphi [-]
 
 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 begin
 Label1.Caption:='Tecla '+inttostr(key);
 end;

Un Saludo.

roman 28-02-2005 23:02:53

Leyendo la respuesta del amigo Marcos veo que tengo que leer con más detenimiento la pregunta original.

Ciertamente 9 es el código de la tecla de tabulación pero no podrás detectarla con lo métodos usuales de los eventos OnKeyDown, OnKeyUp u OnKeyPress.

La tecla Tab es una tecla especial para mover el foco del control activo y por lo mismo no se manda a los controles de la misma forma que otras teclas.

Un Edit, por ejemplo, no recibe el evento OnKeyDown ni OnKeyPress con esta tecla. Sí recibe el OnKeyUp pero demasiado tarde: si el foco está en Edit1, al oprimir Tab, primero se cambia el foco al siguiente control, digamos Edit2 y éste último es quien recibe el evento.

Podrías intentar poner una componente TApplicationEvents y usar su evento OnMessage para detectar la tecla:

Código Delphi [-]
if (Msg.message = WM_KEYDOWN) and (Msg.WParam = 9) then
  ...

// Saludos

JODELSA 01-03-2005 16:54:02

Mi problema consiste exactamente en que tengo un edit en mi formulario
y controlo varios proceso cuando el usuario presiona ENTER, pero algunos usuario presionan TAB para salir, por lo que quiero evitar que salgan del edit con TAB, puedo hacerlo tambien en el evento on EXIT y lo hace aunque salgan con TAB, pero en algunas ocaciones me produce un efecto algo incomodo.

roman 01-03-2005 18:22:39

Pues tal como te dije. Hasta donde probé ayer, si en el evento OnMessage de una componente ApplicationEvents pones

Código Delphi [-]
if (Msg.message = WM_KEYDOWN) and (Msg.WParam = 9) then
  Msg.Wparam := 0;

inhabilitas la tecla del todo.

// Saludos

JODELSA 01-03-2005 20:00:18

Tu me dice que ApplicationEvents es un componente, donde lo consigo,

JODELSA 01-03-2005 20:05:17

Excusame pero ya lo encontre
gracias..

roman 01-03-2005 20:06:09

Cita:

Empezado por JODELSA
Tu me dice que ApplicationEvents es un componente, donde lo consigo,

Pues no sé qué versión de Delphi tengas pero desde por lo menos la versión 6 la componente viene en la pestaña Additional de la paleta de herramientas.

// Saludos

JODELSA 01-03-2005 20:12:01

Oye la operación fue un exito....

ptt 01-03-2005 20:55:28

Acá están dos ejemplos de como se puede capturar la tecla TAB, el primero para el evento KeyDown o KeyUP y el segundo para el evento KeyPress.

Código:

procedure TForm1.dbgDetalleKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
  if Key = VK_TAB then
    Key := 0;
end;

procedure TForm1.dbgStockKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #9 then
    Key := 0;
end;

Al asignar Key := 0 es como si no se hubiera presionado ninguna tecla, fijate cual te sirve para tus propósitos.

roman 01-03-2005 21:11:21

Cita:

Empezado por ptt
Acá están dos ejemplos de como se puede capturar la tecla TAB, el primero para el evento KeyDown o KeyUP y el segundo para el evento KeyPress.

¿Has probado este código? Al menos en Delphi 7 no funciona.

// Saludos

ptt 01-03-2005 21:29:29

Este código lo copié de aplicaciones que hice en Delphi 5, la verdad es que no lo probé en versiones mas nuevas, pero hoy por la noche (en Argentina sería en 5 hs) lo pruebo en D2005.
Que error está dando el compilador?? o es otro el problema?

roman 01-03-2005 21:54:07

Acabo de probar en Delphi 5 y tampoco funciona.

No es que de algún error, es simplemente que no detecta la tecla. Como mencioné, la tecla TAB no se comporta como el resto.

// Saludos

roman 01-03-2005 22:01:44

Aquí hay una explicación muy detallada de por qué es así dada por Peter Below del TeamB de Borland.

// Saludos

JODELSA 01-03-2005 23:34:09

Utilizando el componente ApplicationEvents y anulando la tecla queda perfecto. Asi que se pueden probar.

ptt 01-03-2005 23:44:52

Bueno Roman, estuve leyendo los datos que enviaste y tienes razón en lo que dices.
El código que envié en el mensaje anterior corresponde a los eventos de unos DBGrids donde si funciona.
Y me ha quedado claro que no funcionaría con los TEdit.


La franja horaria es GMT +2. Ahora son las 04:32:27.

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