2010-12-03 118 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選定焦點 - 並將該比率(或相反)應用於「基本」警告顏色。

我不認爲這些建議中的很多(或任何)建議都特別好。當我閱讀並思考你的問題時,他們只是我的一些想法。