2010-12-03 11 views
9

Quiero utilizar colores del sistema cuando sea posible. ¿Cómo elegir colores que no están incluidos en los colores del sistema?Color "Sistema" para advertencias (rojo)

Tanto clase SystemColors de WPF, SystemColors clase de WinForms y COLOR_* constantes para GetSysColor función de la API no contienen colores que se pueden utilizar para las advertencias. Las advertencias suelen ser rojas, pero no hay garantía de que no estén cerca de los colores del sistema que usa el usuario.

Quiero mostrar elementos en un ListBox usando colores de sistema estándar (generalmente texto negro sobre fondo blanco para elementos no seleccionados, blanco sobre azul marino para seleccionado, blanco sobre gris claro para seleccionado desenfocado). Cuando un elemento es problemático (por ejemplo, la operación con la que se relaciona ha fallado), quiero que su texto sea rojo para llamar la atención. Usar un solo color para los tres casos (seleccionado, seleccionado desenfocado, no seleccionado) ya es problemático, porque me resulta difícil leer texto rojo sobre fondo gris claro.

Usar solo colores personalizados y así evitar el problema es un comportamiento inaceptable. Los usuarios esperan que los programas respeten sus configuraciones.

¿Cómo elegir el color correcto para las advertencias?

+4

Pensé que las advertencias eran amarillas y los errores eran rojos? – Nate

+0

@Nate Me temo que es aún más difícil mostrar texto amarillo sobre fondo blanco que texto rojo. :) Raramente he visto amarillo usado para advertencias. Probablemente porque solo se puede usar en fondos oscuros poco utilizados. – Athari

+1

Tal vez un enfoque diferente funcione mejor, consulte el registro de eventos de Windows para ver un buen ejemplo. Utilizan iconos en su lugar, más intutive (en mi humilde opinión) ya que todo el texto sigue siendo constante. – Nate

Respuesta

3

Posiblemente vale la pena considerar un nuevo enfoque. Usar iconos de colores como el registro de eventos de Windows. Mantenga todo el texto consistente y use iconos de colores para distinguir visualmente los diferentes tipos de datos.

5

"Usando sólo los colores personalizados y así evitando el problema es inaceptable comportamiento. Los usuarios esperan que los programas a respetan sus valores."

Pero, ¿dónde especifica el usuario un color para las advertencias?

Si desea un color llamativo dependiendo de los colores del sistema, puede tomar el color del elemento seleccionado y saturarlo un poco, o hacerlo más rojo (por ejemplo, hacer que su componente rojo RGB sea 0xFF, y lo hará depende de la configuración del usuario a través de los otros dos componentes).

4

Lo más cercano que he tenido a este tipo de problema fue en un proyecto donde implementamos alguna manipulación del color para asegurar que los elementos en un programa CAD no fueran "accidentalmente" ocultos por el usuario cambiando el color de fondo. Por ejemplo, si el color de fondo era negro y había algunos elementos blancos en el archivo CAD, todo estaba bien. Los elementos blancos son obviamente visibles contra el fondo negro. Sin embargo, si el usuario cambia a un fondo blanco, los elementos blancos ya no son visibles. Implementamos una lógica que manipulaba (con mucha mano) el color del elemento (durante el sorteo) para garantizar que fuera visible. Normalmente, esta lógica solo se activaba si el color del elemento era exactamente igual al color de fondo. Más tarde, extendimos el cheque para cambiar el color del elemento si estaba "cerca" del color de fondo. Esto fue razonablemente exitoso en que ningún elemento fue ocultado accidentalmente. Sin embargo, los colores resultantes a veces eran bastante horribles. Ese es solo un trasfondo para cuando tuve que lidiar con los colores programáticamente.

Aquí hay un post that describes how to pick a good text color for a given background color. Probablemente esto sea de uso limitado porque no solo quiere un color que sea visible, probablemente prefiera usar Rojo (o tal vez otro color) y solo lo cambie si no es fácil de leer (o no es obviamente indicativo de un problema).)

Here is an article that describes how to modify a color by manipulating brightness and saturation en lugar de perder el tiempo con los valores RGB.

Puede hacer que los elementos problemáticos en la lista tengan un fondo blanco y luego usar el texto rojo sobre el fondo. No he hecho demasiada programación de UI, así que no puedo decirte qué fácil o difícil es esto en la práctica (para cambiar el color de fondo de un solo elemento en un ListBox).

Utilizando el primer enlace que publiqué como punto de partida, podría probar Rojo para ver si es "fácil de leer" mediante algunos cálculos de color. ¿Qué tan lejos está el rojo del color de fondo? Si está "demasiado cerca", abandone y obtenga un mejor color de contraste (que NO es el mismo que el que habría dibujado si no hubiera ningún error).

Puede definir un color (o colores) de "advertencia" para cada uno de varios esquemas de colores estándar de Windows (cambiando a cada uno de estos esquemas, definiendo un color de advertencia que satisfaga el color del texto y el color de fondo). Si el usuario está usando uno de esos esquemas (o al menos si el color de fondo y el de texto coinciden con una de las combinaciones de colores de fondo/texto que definió), simplemente use uno de sus colores de advertencia predefinidos. Si el usuario no lo está, intente encontrar un color que pueda funcionar comparando el color de fondo y el color del texto del usuario con los colores predefinidos y use el que sea la mejor opción. Si no coincide bien (es decir, todos los colores de advertencia predefinidos posibles no son "fáciles de leer" dados algunos criterios), intente calcular un color desde cero que sea visible pero NO sea igual al color de texto que está reemplazando.

Puede definir varios colores de advertencia discretos que cree que son fáciles de leer contra ciertos rangos de color. Tal vez defines 16 colores. Puede elegir usar Color1 si el color de fondo cae dentro de ColorRange1, Color2 para BackgroundColor2, etc. No sé cuántos colores debería definir para asegurarse de tener una "buena" opción para todas las combinaciones de colores posibles. Al definir los colores de advertencia "a mano", es posible que tengas una mejor oportunidad de lograr colores relativamente "estéticamente agradables" que si intentaras generar un color de advertencia en tiempo de ejecución.

Si puede predefinir un color de advertencia individual para un color de fondo dado (digamos no seleccionado), puede interpolar los colores de advertencia correspondientes para los casos enfocados y desenfocados utilizando la relación entre los colores de fondo, p. Ej. no seleccionado versus seleccionado seleccionado, y aplicando esa relación (o lo contrario) al color de advertencia "base".

No afirmo que muchas (o ninguna) de estas sugerencias sean particularmente buenas. Son solo algunas ideas que tuve cuando leí y pensé en tu pregunta.

Cuestiones relacionadas