Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Identificar el Tabulador (https://www.clubdelphi.com/foros/showthread.php?t=13995)

AGAG4 07-09-2004 02:02:42

Identificar el Tabulador
 
Solo quiero saber con que número ó palabra puedo referenciar el TAB, esto lo quiero por que solo valido el Enter=13 en el OnkeyDown, y ya probe esto pero no me funciono: if (key=13) or (key=VK_TAB) then
de ante mano Gracias....

Neftali [Germán.Estévez] 07-09-2004 11:22:10

Cita:

Empezado por AGAG4
Solo quiero saber con que número ó palabra puedo referenciar el TAB, esto lo quiero por que solo valido el Enter=13 en el OnkeyDown

Creo que no vas a poder hacerlo en un TEdit estandard, sino que la única forma va a ser derivando el control e intentando capturar alguno de los mensajes de tecla, ya que en los eventos de los controles estandard, cuando se lanza el evento esa tecla ya ha sido filtrada.

En cuanto a la forma de referirte a la tecla TAB esa es la correcta, sólo que en éste punto no te sirve como te he comentado antes.

Si derivas el componente TEdit puedes redefinir el mensaje

Código Delphi [-]
procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;

y programar algo como lo que estabas haciendo tú:

Código Delphi [-]
  // comprobación
  if (Message.CharCode = VK_TAB) then begin
    MessageDlg('Se ha pulsado la tecla TAB', mtInformation, [mbOK], 0)
  end;
  // método heredado
  inherited;

verás como en éste caso sí funciona.

AGAG4 07-09-2004 21:04:07

oki
 
Sr. Germán Estévez, ya probe lo que me dijo perp en donde se declará el siguiente procedimiento:
procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;

Ya lo declare en el public de la forma, en private, me lo acepta pero me marca error "Unsatisfied Forward", por lo que añado el cuerpo de este mismo procedimiento y después me marca el error en "message WM_KEYUP;", en que estoy mal????

Neftali [Germán.Estévez] 08-09-2004 09:34:04

Bueno, como la unit es pequeña la pongo completa.
Este sería el .PAS correspondiente a un nuevo componente derivado de un Edit que detecta la punsación de la tecla TAB.

Código Delphi [-]
unit editTAB;
interface
uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls;
type
  teditTAB = class(tedit)
  private
    { Private declarations }
    procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;
procedure Register;
implementation
uses
  Dialogs;
procedure Register;
begin
  RegisterComponents('NoSirve', [teditTAB]);
end;
{ teditTAB }
procedure teditTAB.WMKeyUp(var Message: TWMKeyUp);
begin
  if (Message.CharCode = VK_TAB) then begin
    MessageDlg('TAB keyUp', mtInformation, [mbOK], 0)
  end;
  inherited;
end;
end.

Cosas que debes mirar:
(1) Si te fijas en el método register yo lo instalo en la paleta NoSirve, cambia ésto con el nombre de la paleta donde desees que te aparezca (Standard, Additional,...)
(2) Al redefinir el mensaje se muestra un cuadro de diálogo y psteriormente se llama a inherited (para que haga el comportamiento standard, es decir pasar al siguiente control como hace el TAB siempre).
(3) Para que sea funcional, puede instalarlo en un package existente (el de usuario) o crearte un package nuevo (File/New/Other/Package) añadirle ésta Unit e instalarlo.

Un saludo.

AGAG4 08-09-2004 16:16:01

oki
 
Gracias por su respuesta, lo voy a probar.....!!!!

AGAG4 08-09-2004 19:42:54

????
 
Entonces tendría que hacerlo por cada componente que tengo, lo que pasa es que mezclo los BdEdit, Edit, ComboBox y ListBox, No es posible Cachar el TAB de otra forma, es decir que cualquier componente sin necesidad de crear nuevos componentes ó bien de los mismos que uso, modificarlos, agregandoles el código que me proporcionó usted????

Neftali [Germán.Estévez] 09-09-2004 11:26:09

Si lo quieres hacer con todos (eso no lo habías dicho antes...:mad: ) creo que entonces habría que apuntar al formulario; Supongo que si pruebas con la propiedad KeyPreview del Form no funcionará (pruébalo por si acaso); Habría que intentar hacer algo similar en el form. Si la cosa no funciona como último caso siempre tienes derivar los 4 o 5 componentes que utilizas de la misma forma que se ha hecho con el Edit (de todas formas verás que nos es mucho trabajom, ya que sólo tiene unas pocas líneas).


La franja horaria es GMT +2. Ahora son las 20:01:03.

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