2010-12-03 4 views
9

Я хочу использовать системные цвета, когда это возможно. Как выбрать цвета, которые не включены в системные цвета?Цвет системы для предупреждений (красный)

Оба SystemColors класса WPF, SystemColors класса WinForms и COLOR_* константы для GetSysColor функции API не содержат цветов, которые могут быть использованы для предупреждения. Предупреждения обычно красные, но нет никакой гарантии, что они не будут близки к цветам системы, которые пользователь использует.

Я хочу отображать элементы в ListBox, используя стандартные системные цвета (обычно черный текст на белом фоне для невыбранных элементов, белый на флоте для выбранных, белый на светло-серый для выбранных не сфокусированных). Когда элемент проблематичен (например, операция, к которой он относится, не удалась), я хочу сделать свой текст красным, чтобы привлечь внимание. Использование одного цвета для всех трех случаев (выбранных, выбранных не сфокусированных, невыделенных) уже проблематично, потому что мне трудно читать красный текст на светло-сером фоне.

Использование только пользовательских цветов и, таким образом, устранение проблемы является неприемлемым поведением. Пользователи ожидают, что программы будут соблюдать их настройки.

Как правильно выбрать цвет для предупреждений?

+4

Я думал, что предупреждения были желтыми, а ошибки были красными? – Nate 2010-12-03 22:27:08

ответ

3

Возможно, новый подход заслуживает рассмотрения. Использование цветных значков, таких как журнал событий Windows. Сохраняйте текст в соответствии и используйте цветные значки, чтобы визуально различать различные типы данных.

5

«Использование только пользовательских цветов и, таким образом избежать проблем неприемлемо поведения. Пользователи ожидают, что программы на уважать их настройку.»

Но где пользователь указывает цвет для предупреждений?

Если вы хотите, чтобы привлекательный цвет зависел от системных цветов, вы можете выбрать цвет выбранного элемента и немного насытить его или сделать его более красным (например, сделать его красным компонентом RGB равным 0xFF, и это будет зависят от пользовательских настроек с помощью двух других компонентов).

4

Самый близкий к тому, что я столкнулся с такой проблемой, был реализован с помощью некоторых манипуляций с цветом, чтобы элементы в программе САПР не были «случайно» скрыты пользователем, изменяя цвет фона. Например, если цвет фона был черным и в файле САПР были белые элементы, все было хорошо. Белые элементы явно видны на черном фоне. Однако, если пользователь изменился на белый фон, белые элементы больше не видны. Мы реализовали некоторую логику, которая манипулировала (довольно тяжело) цветом элемента (во время рисования), чтобы убедиться, что он был виден. Как правило, эта логика только начиналась, если цвет элемента был точно равен цвету фона. Позже мы расширили проверку, чтобы изменить цвет элемента, если он был «рядом» с цветом фона. Это было разумно успешным в том, что никакие элементы не были случайно скрыты. Однако полученные цвета иногда были довольно отвратительными. Это лишь некоторые предпосылки, когда мне приходилось иметь дело с цветами программно.

Адрес post that describes how to pick a good text color for a given background color. Вероятно, это ограниченное использование, потому что вы не просто хотите, чтобы отображаемый цвет был видимым, вы, вероятно, предпочли бы использовать красный (или, возможно, какой-либо другой цвет), и только изменить его, если он не легко читается (или явно не указывает на проблему).

Here is an article that describes how to modify a color by manipulating brightness and saturation, а не обманывать значения RGB.

Вы можете сделать пункты проблемы в списке белым фоном, а затем использовать красный текст на фоне. Я не программировал много пользовательского интерфейса, поэтому я не могу сказать вам, насколько легко или сложно это на практике (изменить цвет фона одного элемента в ListBox).

Используя первую ссылку, которую я опубликовал в качестве отправной точки, вы можете протестировать Red, чтобы увидеть, является ли она «легко читаемой» некоторой цветовой математикой. Насколько Красный цвет фона? Если он «слишком близко», сдайте и получите более контрастный цвет (который не совпадает с цветом, который вы нарисовали бы, если не будет ошибок).

Вы можете определить «предупреждающий» цвет (или цвета) для каждой из нескольких стандартных цветовых схем Windows (путем переключения на каждую из этих схем, определяя цвет предупреждения, который удовлетворяет вам для заданного цвета текста и цвета фона). Если пользователь использует одну из этих схем (или, по крайней мере, если цвет фона и цвет текста соответствуют одной из выбранных вами цветовых комбинаций фона/текста), используйте только один из предопределенных цветов предупреждений. Если пользователь не работает, попробуйте найти цвет, который может работать, сравнивая цвет фона и цвет текста пользователя с вашими предопределенными цветами и используя тот, который наилучшим образом соответствует. Если хорошие совпадения (т. Е. Все возможные предопределенные цвета предупреждений не являются «легко читаемыми», учитывая некоторые критерии), попробуйте вычислять цвет с нуля, который является видимым, но не совпадает с цветом текста, который вы заменяете.

Вы можете определить несколько дискретных предупреждающих цветов, которые, по вашему мнению, легко читаются в определенных диапазонах цветов. Возможно, вы определяете 16 цветов. Вы можете использовать Color1, если цвет фона попадает в ColorRange1, Color2 для BackgroundColor2 и т. Д. Я не знаю, сколько цветов вам нужно было бы определить, чтобы убедиться, что у вас будет «хороший» выбор для всех возможных комбинаций цветов. Определяя цвета предупреждений «вручную», у вас может быть больше шансов на достижение относительно «эстетически приятных» цветов, чем при попытке генерировать предупреждающий цвет во время выполнения.

Если вы можете предопределить один цвет предупреждения для заданного цвета фона (например, невыбранный), вы можете интерполировать соответствующие цвета предупреждений для выбранных сфокусированных и несфокусированных случаев, используя соотношение между цветами фона - например, невыбранный или выбранный сфокусированный - и применяя это отношение (или наоборот) к «базовому» предупреждающему цвету.

Я не утверждаю, что многие (или любые) из этих предложений особенно хороши. Это всего лишь некоторые идеи, которые я читал и думал о вашем вопросе.