¿Puedo anular el color de un control cuando los estilos visuales están habilitados?

Tengo una aplicación en C ++ Builder 2010 que tiene Visual Styles / Runtime Themes habilitado para usar la búsqueda en tiempo de ejecución de botones y pestañas. Sin embargo, tengo un conjunto de casillas de verificación (TCheckBox) para las que me gustaría anular el estilo de tiempo de ejecución, si es posible.

Mis casillas de verificación se utilizan para alternar algunas superposiciones gráficas para varios colores. Cuando tengo los temas en tiempo de ejecución deshabilitados, puedo configurar el fondo de la casilla de verificación para mostrar qué color habilitará, así: casillas de verificación con un color de fondo personalizado

¿Hay alguna manera de lograr este mismo efecto cuando los temas en tiempo de ejecución están habilitados?

Gracias a stukelly, puedo deshabilitar selectivamente estilos visuales para controles individuales, pero parece que no puedo modificar el color u otro estilo de ese control después de llamar a SetWindowTheme como se muestra a continuación:

SetWindowTheme(CheckBox1->Handle, L" ", ""); 

preguntado el 16 de mayo de 11 a las 18:05

2 Respuestas

Coloque cada casilla de verificación en su propio panel y configúrelo en el color que desee.

contestado el 21 de mayo de 11 a las 23:05

Es un poco complicado con tantos paneles, pero parece funcionar, así que marcaré esto como la respuesta por ahora. - Troyen

Cuando los temas están habilitados, muchos controles obtienen fondos dibujados por el control principal. Los pocos que no tienen una propiedad ParentBackground para controlar este comportamiento, como TPanel y Tscrollbox. Las propiedades ParentColor y, por extensión, Color solo se aplican cuando los temas están deshabilitados. Si bien el uso de paneles es desordenado, no solo funciona con temas, sino con varias bibliotecas de skinning como ExpressSkins para VCL de DevExpress. - Brian

Puede intentar deshabilitar el tema para cada casilla de verificación utilizando el SetWindowTheme función.

  SetWindowTheme(CheckBox1->Handle, NULL, ""); 

No estoy seguro de si el segundo parámetro debe ser NULL or L" " como menciona la documentación.

  SetWindowTheme(CheckBox1->Handle, L" ", ""); 

Usé las siguientes referencias para responder a esta pregunta.
http://www.delphigroups.info/3/7/54654.html
borland.public.delphi.ide.general

contestado el 16 de mayo de 11 a las 23:05

El segundo me llevó a la mitad del camino: los estilos visuales definitivamente están deshabilitados para los controles que paso. El único problema es que ahora parece que no puedo personalizar el estilo TCheckBox después de mi llamada a SetWindowTheme, simplemente conserva el estilo predeterminado. Parece que el tipo del segundo enlace tuvo el mismo problema, pero no obtuvo una respuesta directa. - Troyen

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.