突出显示菜单背景颜色(clHightlightText不起作用)

时间:2016-02-17 00:29:05

标签: delphi c++builder vcl

我需要做一些自定义绘画,当按下或悬停自定义控件中的项目时,我想显示突出显示的项目状态。 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不知道这种系统颜色以及文档没有提供链接的事实它(与其他颜色不同)也不好看。

如何获得高亮文本的非硬编码值?

2 个答案:

答案 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起,它似乎正常工作。

相关问题