我需要做一些自定义绘画,当按下或悬停自定义控件中的项目时,我想显示突出显示的项目状态。 PS。这是适用于Windows 2000的非主题绘画,以及在较高操作系统上的高对比度(或选择时)。
if (State != rsNormal)
{
Canvas->Brush->Color = clHighlight ;
Canvas->Font->Color = clWhite ; // clHightlightText ;
}
else
{
Canvas->Brush->Color = clBtnFace;
Canvas->Font->Color = clBtnText ;
}
上面的当前代码完全符合我的需要,但 Font->Color
clwhite
当然是我在Win2K,WinXP等中看到的情况,但它是不是系统颜色,我担心可能会出现clHighlight
颜色与clWhite
的对比度不足的情况。
documentation提到:clHightlightText
,这基本上就是我所需要的,但我的编译器C ++ Builder 2009不知道这种系统颜色以及文档没有提供链接的事实它(与其他颜色不同)也不好看。
如何获得高亮文本的非硬编码值?
答案 0 :(得分:1)
clHighlightText
是正确的用法。它在同一$(BCB)\include\vcl\Graphics.hpp
头文件中定义,该文件定义了cl...
颜色常量的所有,包括您正在使用的其他
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;
这些常量已经存在了很长时间,可以追溯到早期的C ++ Builder版本。您的版本(CB2009)肯定有它们(上面的定义实际上是从CB2009复制而来)。
答案 1 :(得分:0)
想出来......一个有根据的猜测
(CFR)。我尝试了以下系统颜色的其他颜色的文档:
TColor clHightlightText = TColor(clSystemColor | COLOR_HIGHLIGHTTEXT);
这适用于Win2K,WinXP和Win7 奇怪的是文档和C ++ Builder 2009都没能正确地做到这一点,仍然想知道原因是什么?旧操作系统缺乏支持?无论如何,从Win2K起,它似乎正常工作。