2009-07-07 8 views
5

Sé que en general debería evitar el desorden con la configuración del sistema, pero mi aplicación ya usa colores no estándar y no influyo en eso. Me gustaría poder agregar controles .NET estándar en algunos lugares, pero sus colores no coinciden. Me gustaría tener un truco que reemplace los colores del sistema para esta aplicación. Una cosa más importante a tener en cuenta es que es una aplicación .NET.Cambiando los colores del sistema para una sola aplicación (Windows, .NET)

Mi (incompleto) las ideas hasta ahora eran:

  • para crear una biblioteca User32.dll proxy con GetSysColor reemplazado, pero sería muy tedioso (731 funciones a ser redirigidos, 1 para ser sustituido) y No sé cómo forzar a mi aplicación a usar esa copia en particular.
  • Para interceptar de alguna manera las invocaciones a GetSysColors (desafortunadamente está en algún lugar de la CLR, creo).
  • Para modificar de alguna manera .NET class SystemColors (¿en la memoria? ¿Es posible?).

¿Tiene alguna idea, cuál es la mejor (y completa) forma de lograrlo?

+0

He enganchado con éxito GetSysColor y también GetSysColorBrush. Desafortunadamente, no es suficiente colorear los controles, y todavía no sé por qué. – olpa

Respuesta

2

En mis primeros días desarrollé un programa que registraba un mensaje global de enganche al propietario dibujaba bordes de ventanas: podía tematizar todas las ventanas. Esto debería ser posible para una sola aplicación, también. Sin embargo, esto es no una tarea simple.

De lo contrario, no creo que esto sea posible. ¿Qué le parece usar los controles de terceros modificables como Krypton Toolkit?

+0

En realidad, uso algunos Controles de los Desplazamientos, pero no proporcionan controles regulares como botones o barras de desplazamiento. Verificare a Krypton. Gracias por esta sugerencia. ¿Sería posible que me envíe este programa de coloreado del que está hablando? Estaría agradecido por cualquier detalle adicional. –

+0

Disculpe, no puedo enviarle la fuente de la herramienta, debo haber escrito eso alrededor de 1992 en Borland Pascal. Las fuentes se perdieron hace mucho tiempo ... –

+0

Lo he comprobado: puedo interceptar el evento WM_PAINT utilizando los ganchos del sistema, pero no me da nada. Lo puedo hacer de forma simple anulando OnPaint en mi código C#. Y todavía no puedo cambiar los colores en general. Tal vez solo las fronteras serían posibles (conociendo el rectángulo del cliente), pero esto no es suficiente. –

4

Me gustaría poder agregar controles .NET estándar en algunos lugares, pero sus colores no coinciden. Me gustaría tener un truco que reemplace los colores del sistema para esta aplicación.

Eso es como conducir un clavo con una almádena.

En lugar de ensuciar los colores dentro del sistema, lo que puede hacer es heredar un nuevo control de cada uno de los controles de stock que desea utilizar. Por lo tanto, en lugar de un TextBox simple hereda del control stock TextBox para crear su propio ThemedTextBox. Configuraste este nuevo control para usar el esquema de color de tu aplicación de forma predeterminada, y dado que es sigue siendo un TextBox en lo que respecta a la estructura de herencia, puedes usarlo en cualquier lugar donde uses un cuadro de texto normal, incluido en el diseñador de winforms.

+0

Desafortunadamente en .NET no es posible cambiar los colores en la clase heredada. Tendría que hacer todo el sorteo desde cero.E incluso eso no sería suficiente debido a varios estilos visuales posibles (por ejemplo, XP vs Vista). –

+1

Claro, puedes cambiar los colores. Simplemente actualice el constructor de la clase heredada para establecer las propiedades apropiadas. –

+2

El problema es que en WinFoms no hay "propiedades apropiadas". La clase de control solo tiene ForeColor y BackColor, pero esto no es todo. Para TextBox podemos cambiar solo el color de fondo, pero para ScrollBar no podemos cambiar nada. –

Cuestiones relacionadas