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
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
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TEdit.WMGETDLGCODE(var Msg: TMessage);
begin
inherited;
Msg.Result:= Msg.Result or DLGC_WANTTAB;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_TAB then ShowMessage('VK_TAB');
end;