Hola Oscar.
Fijate si te puede servir el modo que uso en este ejemplo para cualquier
TWinControl o descendiente:
Código Delphi
[-]
type
TForm1 = class(TForm)
...
Edit1: TEdit;
Edit2: TEdit;
...
procedure FormCreate(Sender: TObject);
private
FPrevFocusCtrl: TWinControl;
procedure CMFocusChanged(var Msg: TCMFocusChanged); message CM_FOCUSCHANGED;
procedure ActiveControlChange(Sender: TObject);
public
end;
var
Form1: TForm1;
implementation
uses TypInfo;
type
TSentido = (seAnterior, seSiguiente);
var
SentidoTab: TSentido;
procedure TForm1.CMFocusChanged(var Msg: TCMFocusChanged);
begin
if Assigned(FPrevFocusCtrl) then
begin
if Msg.Sender.TabOrder > FPrevFocusCtrl.TabOrder then
SentidoTab:= seSiguiente
else
SentidoTab:= seAnterior;
FPrevFocusCtrl:= Self.ActiveControl;
end;
inherited;
end;
procedure TForm1.ActiveControlChange(Sender: TObject);
begin
Caption:= Copy(GetEnumName(TypeInfo(TSentido), Ord(SentidoTab)), 3, MaxInt);
FPrevFocusCtrl:= Screen.ActiveControl;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FPrevFocusCtrl:= Screen.ActiveControl;
Screen.OnActiveControlChange:= ActiveControlChange;
end;
...
Saludos