Hola Amigos,
Tengo el siguiente código que con ayuda de nuestro amigo
ecfisa realizamos para cambiar el color del control activo cuando tenga el foco
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
begin
if PrevFocusedCtrl.StyleElements = [seBorder] then
PrevFocusedCtrl.StyleElements:=[seFont, seClient, seBorder];
end;
if Assigned(GetPropInfo(ActiveControl.ClassInfo, 'Color')) then
begin
SetOrdProp(ActiveControl,'Color', FOCUSEDCOLOR);
Activecontrol.StyleElements:=[seBorder];
PrevFocusedCtrl:= ActiveControl;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange:= nil;
end;
El cual realizamos en este hilo
Cambiar color de los controles de edicion al entrar en ellos utilizando VCL Styles
El inconveniente surge cuando el formulario esta embebido en un TabSheet del PageControl y el
ActiveControl no tiene componente asignado o dicho de otra manera es
nil aunque en el Formulario Embebido si se encuentre un control seleccionado. si sustituyo activeControl por Screen.activeControl entonces funciona pero luego de abrir cualquier formulario de búsqueda modal vuelve y se pierde.
Me gustaría encontrar la forma de que se pueda recuperar el activeControl y estoy casi seguro que hacerlo conlleva utilizar las funciones del api de windows pero no tengo mucha experiencia con este tema.
Agradecido enormemente de este Foro.
Saludos,