Hola Delphitest.
Otra opción para detectar el cambio de foco, es usar el evento
OnActiveControlChange :
Código Delphi
[-]
...
type
TForm1 = class(TForm)
...
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure ActiveCtrlChange(Sender: TObject);
...
end;
...
implementation
uses TypInfo;
const
FOCUSEDCOLOR = clMoneyGreen;
UNFOCUSEDCOLOR = clWindow;
var
PrevFocusedCtrl: TWinControl = nil;
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange:= ActiveCtrlChange;
end;
procedure TForm1.ActiveCtrlChange(Sender: TObject);
begin
if not Assigned(PrevFocusedCtrl) then
PrevFocusedCtrl:= ActiveControl;
if Assigned(GetPropInfo(PrevFocusedCtrl.ClassInfo, 'Color')) then
SetOrdProp(PrevFocusedCtrl, 'Color', UNFOCUSEDCOLOR);
if Assigned(GetPropInfo(ActiveControl.ClassInfo, 'Color')) then
begin
SetOrdProp(ActiveControl,'Color', FOCUSEDCOLOR);
PrevFocusedCtrl:= ActiveControl;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange:= nil;
end;
...
De este modo cambiará el color del control focalizado (siempre que poseea la propiedad Color)
Saludos