2016-02-17 62 views
1

我需要執行一些自定義繪畫,並且當自定義控件中的某個項目被按下或懸停時,我想顯示突出顯示的項目狀態。 PS。這是Windows 2000的非主題繪畫,在較高的操作系統上具有高對比度(或選定時)。突出顯示時的菜單背景顏色(clHightlightText不起作用)

if (State != rsNormal) 
    { 
    Canvas->Brush->Color = clHighlight ; 
    Canvas->Font->Color = clWhite ; // clHightlightText ; 
    } 
else 
    { 
    Canvas->Brush->Color = clBtnFace; 
    Canvas->Font->Color = clBtnText ; 
    } 

當前的代碼,上面,完全適用於我的需要Font->Colorclwhite當然是我所看到的是在Win2K,WinXP的等情況,但它不是一個系統的顏色,我擔心有可能clHighlight可能是與clWhite對比不足的顏色。

documentation提到:clHightlightText,這基本上是我需要的,但是我的編譯器C++ Builder 2009並不知道這個系統的顏色和文檔沒有提供鏈接的事實(不同於其他顏色)也不好看。

如何獲取突出顯示文本的非硬編碼值?

+0

您鏈接到的文檔已過時。當前的文檔是[here](http://docwiki.embarcadero.com/Libraries/en/Vcl.Graphics.TColor)。另請參閱[VCL中的顏色](http://docwiki.embarcadero.com/RADStudio/en/Colors_in_the_VCL)。 –

+0

@RemyLebeau - 我想我結束了較早的幫助版本,因爲我搜索了'clHightlightText'。因此,由於錯字,我最終找到了有錯字的在線版本。 – Peter

回答

1

clHighlightText是正確的使用方法。

static const TColor clHighlight = -16777203; 
static const TColor clHighlightText = -16777202; 
static const TColor clBtnFace = -16777201; 
... 
static const TColor clBtnText = -16777198; 
... 
static const TColor clWhite = 16777215; 

這些常量已經出現了很長很長的時間,要回:這是在定義cl...顏色常量所有,包括其他的你正在使用相同$(BCB)\include\vcl\Graphics.hpp頭文件中定義早期的C++ Builder版本。您的版本(CB2009)絕對有它們(事實上,上述定義是從CB2009中複製的)。

+0

AH ...我現在看到它!在線和系統安裝的幫助文件都有一個TYPO! ** clHightlightText **應該是'clHighlightText'這是問題! ('太'太多了......血腥難以辨認......至少對我來說) – Peter

0

想通了......受過教育的猜測

參考文獻系統顏色的其餘部分的文件我試過如下:

TColor clHightlightText = TColor(clSystemColor | COLOR_HIGHLIGHTTEXT); 

這很好地工作在Win2k,WinXP中和Win7 奇怪的是,這兩個文件和C++ Builder 2009年未能完成這一點,仍然不知道是什麼原因是?在較舊的操作系統缺乏支持?無論如何,從Win2K起,它似乎正常工作。

+0

儘管這會起作用,但它也是多餘的,因爲VCL已經爲你定義了「clHighlightText」。查看'Graphics.hpp',其中定義了所有'cl ...'常量。 'clHighlightText'就在那裏。 –

+0

'clHightlightText'應該是'clHighlightText'。這就是爲什麼:) – Peter

相關問題