2010-12-03 123 views
9

我想在可能的情况下使用系统颜色。如何选择不包含在系统颜色中的颜色?警告的“系统”颜色(红色)

Both SystemColors WPF类,SystemColors类WinForms和COLOR_*常量GetSysColor API函数不包含可用于警告的颜色。警告通常是红色的,但不能保证它不会接近用户使用的系统颜色。

我想使用标准系统颜色(通常是白色背景上的未选定项目,白色海军选定,白色浅灰色选择未聚焦)在列表框中显示项目。当一个项目有问题时(例如,它涉及的操作失败),我想让它的文本变成红色以引起注意。对于所有三种情况(选择,选定未聚焦,未选定)使用单一颜色已经成问题,因为我发现在浅灰色背景上阅读红色文本很困难。

只使用自定义颜色,从而避免出现问题是不可接受的行为。用户期望程序尊重他们的设置。

如何选择正确的警告颜色?

+4

我认为警告是黄色的,错误是红色的? – Nate 2010-12-03 22:27:08

回答

3

可能是一种新方法值得考虑。使用诸如Windows事件日志之类的彩色图标。保持所有文本一致,并使用彩色图标直观地区分不同类型的数据。

5

“只使用自定义颜色,从而避免 问题是不可接受的 行为。用户希望程序 尊重他们的设置。”

但是哪里的用户指定的警告颜色?

如果你想要一个吸引眼球的颜色与系统颜色相关,你可以选择一个物体的颜色并使其饱和一点,或者使它变得更红(例如,使它的RGB红色成分为0xFF,它会通过其他两个组件的手段取决于用户设置)。

4

最接近的,我是来为这样的问题是在一个项目都是我们实施了一些颜色处理,以确保在CAD程序元素并非“意外”隐藏用户改变背景颜色。例如,如果背景颜色是黑色,并且CAD文件中有一些白色元素,则一切都很好。白色元素在黑色背景下显然是可见的。但是,如果用户更改为白色背景,则白色元素不再可见。我们实现了一些操作(非常重要)元素颜色(绘制期间)的逻辑,以确保它是可见的。通常情况下,只有元素颜色与背景颜色完全相同时,才会使用此逻辑。后来,我们扩展了检查以更改元素的颜色,如果它“靠近”背景颜色。这是非常成功的,因为没有元素被意外隐藏。但是,由此产生的颜色有时非常可怕。这只是我不得不以编程方式处理颜色的一些背景。

这是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值。

您可以使列表中的问题项目具有白色背景,然后在背景中使用红色文本。我没有做过太多的UI编程,所以我不能告诉你在实践中这很容易或难以实现(更改ListBox中单个项目的背景颜色)。

使用自己发布为起点的第一个链接,你可以测试红色,看它是否是“易于阅读”的一些颜色数学。红色与背景颜色有多远?如果它“太接近”,放弃并获得更好的对比色(与没有错误时绘制的颜色不同)。

您可以为几种标准Windows配色方案中的每一种定义一种“警告”颜色(通过切换到这些方案中的每一种,定义满足给定文本颜色和背景颜色的警告颜色)。如果用户碰巧使用了其中一种方案(或者至少背景颜色和文字颜色与您定义的背景/文字颜色组合之一匹配),则只需使用您预先定义的警告颜色之一即可。如果用户不是,则尝试通过将用户的背景颜色和文本颜色与预定义的颜色进行比较来找到可能起作用的颜色,并使用最匹配的颜色。如果没有合适的匹配项(即所有可能的预定义警告颜色在给定某些条件时都不是“易读”的),那么尝试从头开始计算可见的颜色,但与您要替换的文本颜色不同。

您可以定义几种离散的警告颜色,您可以根据特定的颜色范围轻松读取它们。也许你定义了16种颜色。如果背景颜色属于ColorRange1,Color2属于BackgroundColor2等,您可以选择使用Color1。我不知道您需要定义多少颜色才能确保您对所有可能的颜色组合都有“好”选择。通过“手动”定义警告颜色,与在运行时尝试生成警告颜色相比,您可能有更好的机会实现相对“美观”的颜色。

如果您能够为给定的背景颜色(例如未选定)预定义单一警告颜色,则可以使用背景颜色之间的比率为所选聚焦和未聚焦的案例插补相应的警告颜色 - 例如,未选择vs选定焦点 - 并将该比率(或相反)应用于“基本”警告颜色。

我不认为这些建议中的很多(或任何)建议都特别好。当我阅读并思考你的问题时,他们只是我的一些想法。