我注意到使用clDefault
颜色的一些异常行为。
clDefault = TColor($20000000); //536870912
作为示例(http://wiki.freepascal.org/Colors):
- 将它用于画笔将使用目标的普通背景画笔 DC(设备上下文)。
在Form&#39的画布上,FillRect将绘制一个 矩形区域填充标准的正常背景 窗口。这是widgetset和主题定义的任何内容。这有可能 是灰色或渐变或图片。
使用clDefault TListBox的画布将使用正常背景进行绘制,即 在Windows上通常是白色的。所以在TListBox中clDefault就是一样的 clWindow。
将其用作笔颜色将使用默认的线条颜色 设备上下文。
将其用作字体颜色将使用普通文本 设备上下文的颜色。
有人可以告诉我clDefault
的工作原理吗?
我的意思是,它是由操作系统还是VCL代码解释的?如何?
答案 0 :(得分:6)
您提供了FPC文档的链接,但随后谈了VCL并标记了Delphi这个问题。我将假设您询问Delphi VCL并忽略不适用的链接文档。
在VCL中,对于笔,字体和画笔,默认颜色为黑色。那是因为$20000000
对于R,G和B通道有0。 Alpha通道为$20
,但对于LineTo
,FillRect
等方法肯定会被忽略。这与您链接到的FPC文档完全不同。
如果您使用clDefault
作为Color
的{{1}},那么它将再次为黑色。同样,与您链接到的FPC文档不同。
当然,值TListBox
对GDI没有特殊意义。对于笔,字体,画笔等,该值传递给GDI,后者将其解释为黑色。
如果您学习VCL源代码,您会发现使用$20000000
的各种地方。主clDefault
用作sentinel value。 VCL代码检查指定的颜色属性是否等于clDefault
,然后采取特殊操作。
据我所知,这就是它的全部内容。 VCL的某些部分将clDefault
视为哨兵,否则为黑色。