Ver Mensaje Individual
  #2  
Antiguo 05-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
El problema es que windows no llega a enviar la tecla TAB al edit, ya se encarga el de procesarla. Para prevenir esto, windows primero manda el mensaje WM_GETDLGCODE al control preguntando entre otras cosas si quiere que sea windows el que se encargue de la tecla o prefiere ser el.

Pues bien, seguramente habra alguna forma mas sencilla de hacer esto, y aqui hay expertos suficientes para corregirme , pero esta solucion me parece interesante. Vamos a hacer que todos los edit del formulario acepten la tecla TAB.

Código Delphi [-]
type
  // Aqui esta la clave, cambiamos la forma de procesar este mensaje
  // Ojo, tiene que estar antes de la definicion de TForm1
  TEdit = class(StdCtrls.TEdit)
  private
    procedure WMGETDLGCODE(var Msg: TMessage); message WM_GETDLGCODE;
  end;

  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Aqui procesamos el mensaje
procedure TEdit.WMGETDLGCODE(var Msg: TMessage);
begin
  inherited;
  Msg.Result:= Msg.Result or DLGC_WANTTAB;
end;

// Esto es solo una prueba para comprobar que funciona bien
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_TAB then ShowMessage('VK_TAB');
end;

Última edición por seoane fecha: 05-06-2006 a las 13:31:07.
Responder Con Cita