【问题标题】:Menu background color when highlighted (clHightlightText doesn't work)突出显示时的菜单背景颜色(clHightlightText 不起作用)
【发布时间】:2016-02-17 00:29:04
【问题描述】:

我需要做一些自定义绘画,当自定义控件中的项目被按下或悬停时,我想显示突出显示的项目状态。 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->Colorclwhite当然是我在Win2K、WinXP等中看到的情况,但它不是系统颜色我担心在某些情况下clHighlight 可能是与clWhite 对比度不足的颜色。

documentation 提到:clHightlightText,这基本上是我需要的,但我的编译器 C++ Builder 2009 不知道此系统颜色以及文档未提供链接的事实(不同于其他颜色)也不好看。

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

【问题讨论】:

  • 您链接到的文档是旧的。当前文档为here。另见Colors in the VCL
  • @RemyLebeau - 我想我最终使用了旧版帮助,因为我搜索了“clHightlightText”。因此,由于错字,我最终找到了也有错字的在线版本。

标签: delphi c++builder vcl


【解决方案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 复制的)。

【讨论】:

  • 啊...我现在看到了!!在线和系统安装的帮助文件都有一个 TYPO ! clHightlightText 应该是clHighlightText 这就是问题! (一个't'太多......该死的也很难发现......至少对我来说)
【解决方案2】:

想通了......有根据的猜测

参照。其余系统颜色的文档我尝试了以下方法:

TColor clHightlightText = TColor(clSystemColor | COLOR_HIGHLIGHTTEXT);

这在 Win2K、WinXP 和 Win7 上运行良好 奇怪的是文档和 C++ Builder 2009 都未能正确执行此操作,并且仍然想知道原因是什么?旧操作系统缺乏支持?无论如何,从 Win2K 及更高版本它似乎可以正常工作。

【讨论】:

  • 虽然这会起作用,但它也是多余的,因为 VCL 已经为您定义了clHighlightText。查看Graphics.hpp,其中定义了所有cl... 常量。 clHighlightText 在里面。
  • clHightlightText 应该是 clHighlightText。这就是为什么:)
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 2013-09-29
  • 2013-01-09
相关资源
最近更新 更多