FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Pintar todos los componentes del sistema dinámicamente
Hola, tengo un gran problema:
Componente: TAdvComboBox ¿Qué quiero hacer?: Pintar todos los componentes del sistema dinámicamente ¿Cómo hago esto?: En el OnCreate() de todos los formularios invoco a una función, la cual recorre todos los componentes y según su tipo usa un color u otro. ¿Cuál es el problema?: Pues, inicialmente se pinta perfecto (tanto el color principal, borde, color de foco, texto de foco, etc), sin embargo, cuando pierde el foco toma el valor del DFM, es decir, si en el DFM el color es verde, y en tiempo de ejecución lo pinto rojo, cuando se ve por primera vez es rojo, cuando saco el foco, se ve verde, NO TIENE LÓGICA Miré internamente el código de ese componente y parece ser que si lo guarda, ¿qué parche me recomiendan aplicar? A - cambiar manualmente todos los dfm no lo veo viable, y tampoco es una solución genérica B- hacer una función y asignarla en tiempo de ejecución al método OnExit() que vuelva a repintar, podría ser..., pero, ¿quien me asegura que alguno de esos componentes en una parte X de la aplicación ya no tenga asignado OnExit()?, por lo tanto este último parche podría ser un arma de doble filo, y ya no se me ocurre nada mas. Necesito consejos de expertos Última edición por strelok fecha: 02-02-2018 a las 18:24:17. |
#2
|
||||
|
||||
Sí que la tiene. Es sólo que Windows no funciona como estás pensando. Lo que tú pintes va a desaparecer porque la programación en un entorno gráfico se basa en eventos. Si una ventana oculta a la tuya, lo que hayas pintado en el OnCreate se pierde. Lo que debes manejar es el evento OnPaint o similar para pintar cada vez que sea necesario.
LineComment Saludos |
#3
|
||||
|
||||
Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Hola, ¿no será que los componentes tienen asignado el colorparent, colorfont y demás enseres a true y por eso en un principio parece que cambian de color pero luego vuelven a su ser?
Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta. |
#5
|
|||
|
|||
Lo que comentaron de probar en el "OnActivate", no lo probé, pero si en el OnPaint del formulario, y era bastante inviable, ya que resultó ser muy lento.
Mi función que pinta es recursiva, le mando "SELF" y recorre todos sus hijos, y pregunta que componente es, para posteriormente pintarlo de un color u otro. ¿Cuál sería la diferencia en el OnActivate? Voy a probar las propiedades que dices. |
#6
|
||||
|
||||
Cita:
Cita:
Realizar "cosas" en el OnPaint es delicado, porque es un evento que se lanza continuamente. Por ejemplo, simplemente con pasar el ratón por encima o con colocar algo delente del form. El OnActivate es un evento del formulario que se lanza cuando el formulario recibe el foco, que parece ser cuando llegan los problemas. Evento OnActivate
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
¿Como almaceno componentes creados dinamicamente? | strelok | OOP | 7 | 05-12-2017 18:56:03 |
Pintar borde HotSpot de los componentes TMSsoftware | el-mono | Gráficos | 0 | 28-01-2014 02:07:54 |
Sistema Todos contra todos | JAI_ME | Varios | 2 | 20-06-2011 22:01:14 |
Crear dinámicamente componentes en el formulario | D@byt | Varios | 2 | 27-11-2005 22:30:05 |
Cómo puedo generar dinámicamente componentes | felipin007 | OOP | 2 | 02-02-2005 18:05:39 |
|