![]() |
Detectar evento cambio de foco
Hola a todos. Necesito una guia. Quiero hacer un componente que al soltarlo sobre el form, me tome todos los componentes del form y que el mismo componente cambie de color a los otros componentes al cambiar el foco. La cosa es que ya pude tomar todos los componentes, y tambien se como cambiarle el color a los componentes. Ahora bien, como hago para saber que hubo un cambio de foco entre componentes? Habra algun evento del form?.
|
No acabo de ver en TForm ningun evento que puedas utilizar para eso.
Seguramente si utilizaras un derivado de éste (TForm) podrías capturar algun mensaje o sobreescribir algun procedimiento. |
Gracias Neftali, sigo buscando y nada todavia, por el momento cada componente cambia el color a si mismo cuando recibe o pierde el foco. Pero creo que lo ideal seria un solo componente que administre todo eso. En fin, seguire buscando. Saludos.
|
Hola pborges36,
recorde haber visto algo similar, y puede que este link te ayude, no es un componente, pero creo que te servira de guia para hacer uno: http://delphi.about.com/od/vclusing/...ingfocused.htm La solucion para por usar Tscreen y la RTTI. Espero que te sea de ayuda... Oscar Noe |
gracias Oscrnoe, lo voy a revisar y de paso practico mi ingles que esta un poco abandonado. jeje. Cualquier novedad te aviso y Gracias de nuevo.
|
oscarnoe te paso el link justo, te estaba a punto de recomendar justamente la primera opcion del articulo.
Pero en el articulo te da una exelente solucion que es justo lo que necesitas. despues nos mostras como te quedo el componente |
Ya esta listo!!
Hola a todos. Quiero agradecerles enormemente porque finalmente, Con la ayuda de Uds. porsupuesto, termine el componente que me propuse. Y aqui les dejo el codigo, espero su opinion, comentarios y sugerencias para que vayamos mejorandolo. Gracias.
Solo tienen que soltarlo sobre su formulario principal y listo!! |
muy bien !!!
Te quedo muy bien. Aprovechando que tengo un poco de tiempo libre (mi mujer y mi hijo no estan por un dia :D) te hice unos cuantos retoques, espero que no te moleste.
Agregue colores por defecto, un evento cuando se produce el cambio de foco y reescribi el metodo ScreenActiveControlChange.
|
Cita:
Creo que esto se puede optimizar (para cualquier componente que tenga esa propiedad) utilizando RTTI. Lo bueno de esto es que generalizando un poco la siguiente función se puede hacer para cualquier propiedad.
|
Cita:
Este es el codigo que use:
|
Cita:
De todas formas creo que sería mejor programarlo así y en todos caso aplicar código espacial para las exceciones y no al revés. |
Cita:
Cita:
El problema del TListBox es que no se redibuja correctamente completo, solo la parte de los items. Estuve probando recien para que se redibuje correctamente pero no logro que se redibuje el fondo. Para que se redibuje correctamente, tengo minimar y maximizar la aplicacion. Esto quiere decir que debe existir algun metodo que me lo repinte completo, pero no lo encuentro. |
¿No se están complicando mucho?
A quien se quiere cambiar de color es a un TWinControl y la propiedad Color aparece desde TControl. Sólo hay que desprotegerla:
// Saludos |
Cita:
Igualmente sigue el problema del TListBox, que el tonto no se sabe repintar :p |
¿Y quién dice que estás haciendo pública toda la clase? :confused:
Fuera del código de AplicarColor, nadie podrá acceder a esas propiedades. // Saludos |
Obviamente fuera del componente no, pero dentro si, pero .... que buena idea me dio :D
|
Me da error al salir de la aplicación
Al terminar la aplicación me da error "Access Violation, read of address...", me imagino que tendré que destruir algo o intento acceder a algún objeto que ya no existe.
De todas formas, me imagino que habrá algún componente ya existente que haga esto mismo, yo tengo la Jedi VCL pero si lo hay no se localizarlo. |
Hola a todos.
Ya se que este hilo es viejo pero es el que creo que va a hacer lo que necesito, cambiar el fondo de los controles a medida que van recibiendo el foco. He creado la unit y la he puesto en uses del form, pero no se pinta nada. He usado el código que retocó Crandel. Tambien probé el tema de las RTTI y funciona bien, cambia de color al recibir foco, pero al salir de un form Child, me deja una sombra negra en el form Padre. Gracias por adelantado Josep |
Holas. Lo que hice fue poner la unit que retoco crandel en un dpk y luego instalarlo. Con esto me aparece en la paleta de componentes. De ahi solo lo solte en el formulario pricipal y listo, funciona muy bien.
Saludos. |
Gracias, no lo habia entendido.
He creado y compilado el dpk, correcto; lo suelto en el for, correcto pero al hacer F9 el resultado es este: Project xxx.exe raised exception class EInvalidCast with message 'Invalid class Typecast' Process stoped Press Step or Run to continue. Alguna pistilla? Josep |
La franja horaria es GMT +2. Ahora son las 07:03:42. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi