Foros Club Delphi

Foros Club Delphi (http://www.clubdelphi.com/foros/index.php)
-   OOP (http://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cambiar color de los controles de edicion al entrar en ellos utilizando VCL Styles (http://www.clubdelphi.com/foros/showthread.php?t=92604)

juniorSoft 08-12-2017 00:29:25

Cambiar color de los controles de edicion al entrar en ellos utilizando VCL Styles
 
Hola amigos,

Buscando en nuestro ClubDelphi encontre este link http://clubdelphi.com/foros/showthread.php?t=87442 el cual muestra una forma genérica de cambiar el color al edit que tiene el foco, pero cuando Utilizo los VCL Styles no funciona el código ofrecido por nuestro amigo ecfisa; buscando encontre este link que se utiliza para cambiar el color de los controles cuando se utilizan los VCL Styles https://theroadtodelphi.com/2012/02/06/changing-the-color-of-edit-controls-with-vcl-styles-enabled/
. Con el código se puede cambiar el color de los edits entre otros utilizando los VCL Styles pero trate de hacer una combinación de ambos para hacer que cuando un edit coja el foco cambie de color y al perder el foco vuelva a su color original con los VCL Styles pero no funciona. :confused:

Agradecido como siempre de su bondad y deseo de ayudar a los demás.

juniorSoft 08-12-2017 02:35:46

Me respondo

Código:

...
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
    // SetOrdProp(PrevFocusedCtrl, 'Color', UNFOCUSEDCOLOR);
  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;
...


ElKurgan 11-12-2017 08:51:48

Gracias por compartir la solución

Saludos

ecfisa 11-12-2017 17:24:37

Hola

Lo mismo digo, muy agradecido de que hayas publicado la respuesta.


Saludos :)


La franja horaria es GMT +2. Ahora son las 21:51:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi