Lazarus

Other Languages => Spanish => Topic started by: daragor on May 03, 2017, 01:39:50 am

Title: Cambio de Color al obtener el foco
Post by: daragor on May 03, 2017, 01:39:50 am
Hola muchachos, recurro a uds. nuevamente... alguno puede guiarme para realizar lo siguiente:
En un formulario de recoleccion de datos me gustaria que los "inputs" (de textos, de nros, fecha. etc) al obtener el foro cambien el color ya sea de letra o de fondo, algo tipico en sistemas web x ej. con javascript esto se logra con una linea. pero en lazarus desconozco el mejor método, claro no quiero ir metiendo codigo en los eventos "onEnter" ni "onExit" de cada objeto...

Quiero aclarar que no solo son tedit, uso mucho los botones de "jujiboutils" por ejemplo.

gracias!!
Title: Re: Cambio de Color al obtener el foco
Post by: Edson on May 03, 2017, 06:26:04 am
Pues, la única forma segura que conozco, es usar OnEnter() y OnExit(). 
Title: Re: Cambio de Color al obtener el foco
Post by: GAN on May 03, 2017, 07:51:32 am
Tal como te indica Edson, con OnEnter y OnExit.
También utilizo jujiboutils y este código me funciona tanto para los edits normales como para los de jujiboutils:

Code: Pascal  [Select][+][-]
  1. procedure TForm1.ResaltarEdit(Sender: TObject);
  2. begin
  3.   TDBEdit(Sender).Color:=clMoneyGreen;
  4. end;
  5.  
  6. procedure TForm1.NormalEdit(Sender: TObject);
  7. begin
  8.   TDBEdit(Sender).Color:=clDefault;
  9. end;    

No es una sola linea pero es bastante simple, luego sí tenes que ir edit por edit e indicar estos eventos.
Saludos.
Title: Re: Cambio de Color al obtener el foco
Post by: jmm72 on May 07, 2017, 03:49:30 pm
Como han dicho otros, la mejor forma es usar OnEnter y OnExit. Yo haría una llamada genérica a otra función para cambiar el color, mandando como parámetro el control que va a cambiar el color, y el modo (con o sin foco). Así puedes tener todo el control de cambio de color en un solo sitio, para futuros cambios.

Pero no es la única forma. Puedes extender la clase en cuestión para que tenga diferentes colores dependiendo de si tiene el foco o no, y manejar mensajes de Windows para que cambien el estado del control. Aunque esto es más complicado, claro.

Una última manera, poco elegante pero quizá práctica depende de la situación, es mirar cada vez que se pulse una tecla o botón de ratón (OnKeyDown, OnClick, etc. de TForm) que mire si TForm.ActiveControl es del tipo que tú quieres, y si es así, pues a cambiar colores. Creía que los forms tenían un evento estilo OnChangeFocus u OnActiveControlChange, pero no lo encuentro ni en TForm ni en TCustomForm. ActiveControl es una propiedad de tipo TWinControl, que tiene propiedades como Name, Tag que te pueden servir para diferenciar entre los que quieres cambiar y los que quieres ignorar.

Espero que esto te sirva para dar el siguiente paso.
TinyPortal © 2005-2018