Forum > Spanish

Cambio de Color al obtener el foco

(1/1)

daragor:
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!!

Edson:
Pues, la única forma segura que conozco, es usar OnEnter() y OnExit(). 

GAN:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.ResaltarEdit(Sender: TObject);begin  TDBEdit(Sender).Color:=clMoneyGreen;end; procedure TForm1.NormalEdit(Sender: TObject);begin  TDBEdit(Sender).Color:=clDefault;end;    
No es una sola linea pero es bastante simple, luego sí tenes que ir edit por edit e indicar estos eventos.
Saludos.

jmm72:
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.

Navigation

[0] Message Index

Go to full version