Ver Mensaje Individual
  #2  
Antiguo 08-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por elrayo76 Ver Mensaje
Lo que intento es hacer algo como identificar a todos los componentes que sean del tipo ingreso de datos y cuando se ingresa a uno de ellos que se le cambie el color del fondo y cuando se salga se le ponga el color original.
Hola elrayo.

De este modo, cambiará el color del control que posee el foco y lo restaurará al perderlo siempre que el mismo posea la propiedad Color:
Código Delphi [-]
...
const
  WM_AFTER_CREATE = WM_USER + 300;

type
  TForm1 = class(TForm)
     .... 
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FPrevFocusedCtrl : TWinControl;
    FPrevFocusedColor: TColor;
    FFocusedColor    : TColor;
    procedure WmAfterCreate(var Msg: TMessage); message WM_AFTER_CREATE;
    procedure ActiveCtrlChange(Sender: TObject) ;
  public
  end;

var
  Form1: TForm1;

implementation 

uses TypInfo;

procedure TForm1.WmAfterCreate(var Msg: TMessage);
begin
  Screen.OnActiveControlChange := ActiveCtrlChange;
  FPrevFocusedCtrl := Screen.ActiveControl;
  if Assigned(GetPropInfo(FPrevFocusedCtrl.ClassInfo,'Color')) then
  begin
    FPrevFocusedColor := TColor(GetOrdProp(Screen.ActiveControl,'Color'));
    SetOrdProp(Screen.ActiveControl, 'Color', FFocusedColor);
  end;
end;

procedure TForm1.ActiveCtrlChange(Sender: TObject);
begin
  if Assigned(GetPropInfo(FPrevFocusedCtrl.ClassInfo, 'Color')) then
    SetOrdProp(FPrevFocusedCtrl, 'Color', FPrevFocusedColor);
  if Assigned(GetPropInfo(Screen.ActiveControl.ClassInfo,'Color')) then
  begin
    FPrevFocusedColor:= TColor(GetOrdProp(Screen.ActiveControl,'Color'));
    SetOrdProp(Screen.ActiveControl, 'Color', FFocusedColor);
  end;
  FPrevFocusedCtrl:= Screen.ActiveControl;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  FFocusedColor := clLime;
  PostMessage(Handle, WM_AFTER_CREATE, 0, 0);
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Screen.OnActiveControlChange := nil;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita