Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-02-2018
strelok strelok is offline
Miembro
 
Registrado: Sep 2017
Posts: 130
Poder: 2
strelok Va por buen camino
Cool 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.
Responder Con Cita
  #2  
Antiguo 02-02-2018
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.181
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por strelok Ver Mensaje
NO TIENE LÓGICA
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
Responder Con Cita
  #3  
Antiguo 05-02-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.690
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Cita:
Empezado por strelok Ver Mensaje
...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
Cita:
Empezado por roman Ver Mensaje
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.
O probar en el evento OnActivate del formulario.
__________________
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.
Responder Con Cita
  #4  
Antiguo 05-02-2018
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: Jul 2005
Ubicación: Murcia (España)
Posts: 921
Poder: 14
ElDioni Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 05-02-2018
strelok strelok is offline
Miembro
 
Registrado: Sep 2017
Posts: 130
Poder: 2
strelok Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 06-02-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.690
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Cita:
Empezado por strelok Ver Mensaje
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?
Cita:
Empezado por strelok Ver Mensaje
...sin embargo, cuando pierde el foco toma el valor del DFM, es decir, si en el DFM el color es verde...

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.
Responder Con Cita
  #7  
Antiguo 06-02-2018
strelok strelok is offline
Miembro
 
Registrado: Sep 2017
Posts: 130
Poder: 2
strelok Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
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
Sigue exactamente igual
Responder Con Cita
  #8  
Antiguo 07-02-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.690
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
¿Pero has comprobado que el evento salta cuando reactivas el formulario?
¿Es lo que necesitas?
__________________
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 21:07:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi