Recent

Author Topic: Cambio de Color al obtener el foco  (Read 5118 times)

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Cambio de Color al obtener el foco
« 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!!
Inculcando el software libre.
https://www.webscom.com.ar

Edson

  • Hero Member
  • *****
  • Posts: 1296
Re: Cambio de Color al obtener el foco
« Reply #1 on: May 03, 2017, 06:26:04 am »
Pues, la única forma segura que conozco, es usar OnEnter() y OnExit(). 
Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

GAN

  • Sr. Member
  • ****
  • Posts: 370
Re: Cambio de Color al obtener el foco
« Reply #2 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.
Lazarus 2.0.8 FPC 3.0.4 Linux Mint Mate 19.3
Zeos 7̶.̶2̶.̶6̶ 7.1.3a-stable - Sqlite 3.32.3 - LazReport

jmm72

  • Jr. Member
  • **
  • Posts: 79
  • Very experienced in being a beginner...
Re: Cambio de Color al obtener el foco
« Reply #3 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.
Lazarus 1.6.4 + FPC 3.0.2 64bits under Windows 7 64bits
Only as a hobby nowadays
Current proyect release: TBA

 

TinyPortal © 2005-2018