clDefault颜色如何工作?

时间:2016-10-20 08:32:12

标签: delphi colors

我注意到使用clDefault颜色的一些异常行为。

clDefault = TColor($20000000); //536870912

作为示例(http://wiki.freepascal.org/Colors):

  
      
  • 将它用于画笔将使用目标的普通背景画笔   DC(设备上下文)。
  •   
  • 在Form&#39的画布上,FillRect将绘制一个   矩形区域填充标准的正常背景   窗口。这是widgetset和主题定义的任何内容。这有可能   是灰色或渐变或图片。

  •   
  • 使用clDefault   TListBox的画布将使用正常背景进行绘制,即   在Windows上通常是白色的。所以在TListBox中clDefault就是一样的   clWindow。

  •   
  • 将其用作笔颜色将使用默认的线条颜色   设备上下文。

  •   
  • 将其用作字体颜色将使用普通文本   设备上下文的颜色。

  •   

有人可以告诉我clDefault的工作原理吗?

我的意思是,它是由操作系统还是VCL代码解释的?如何?

1 个答案:

答案 0 :(得分:6)

您提供了FPC文档的链接,但随后谈了VCL并标记了Delphi这个问题。我将假设您询问Delphi VCL并忽略不适用的链接文档。

在VCL中,对于笔,字体和画笔,默认颜色为黑色。那是因为$20000000对于R,G和B通道有0。 Alpha通道为$20,但对于LineToFillRect等方法肯定会被忽略。这与您链接到的FPC文档完全不同。

如果您使用clDefault作为Color的{​​{1}},那么它将再次为黑色。同样,与您链接到的FPC文档不同。

当然,值TListBox对GDI没有特殊意义。对于笔,字体,画笔等,该值传递给GDI,后者将其解释为黑色。

如果您学习VCL源代码,您会发现使用$20000000的各种地方。主clDefault用作sentinel value。 VCL代码检查指定的颜色属性是否等于clDefault,然后采取特殊操作。

据我所知,这就是它的全部内容。 VCL的某些部分将clDefault视为哨兵,否则为黑色。