【问题标题】:How does clDefault color work?clDefault 颜色如何工作?
【发布时间】:2017-03-02 03:37:08
【问题描述】:

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

clDefault = TColor($20000000); //536870912

例如(http://wiki.freepascal.org/Colors):

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

  • 在 TListBox 的画布将使用普通背景进行绘制,即 在 Windows 上通常为白色。所以在 TListBox 中 clDefault 与 cl窗口。

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

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

有人能告诉我clDefault 是如何工作的吗?

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

【问题讨论】:

    标签: delphi colors


    【解决方案1】:

    您提供了 FPC 文档的链接,然后谈论 VCL 并标记问题 Delphi。我将假设您询问的是 Delphi VCL,而忽略您不适用的链接文档。

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

    如果您将clDefault 用于TListBoxColor,那么它将再次为黑色。同样,与您链接到的 FPC 文档不同。

    当然,值$20000000 对GDI 没有特殊意义。对于钢笔、字体、画笔等,该值被传递给 GDI,GDI 将其解释为黑色。

    如果你研究 VCL 源代码,你会发现很多地方都用到了clDefault。在主要clDefault 用作sentinel value。 VCL代码检查指定颜色属性是否等于clDefault,如果是则采取特殊动作。

    据我所知,仅此而已。 VCL 的某些部分将clDefault 视为哨兵,否则为黑色。

    【讨论】:

    • 对不起,我已经链接了 FPC 文档,因为我没有找到任何关于 clDefault 的 Delphi 文档,并且我错误地认为它是以相同的方式管理的。我已经删除了报价和链接。无论如何,您已经完全澄清了所有疑问,感谢您的回答!
    • @ExDev, From Colors in the VCL-System Colors: clDefault 分配颜色的控件的默认颜色
    • 好的,但是我的大部分回答几乎没有意义。所以我回复了你的问题,这样我就不必重写我的答案来匹配了!希望没关系。
    • @LURD 是的,这就是我发现的全部,而且它真的没用不是吗!
    • 请注意,TColor 值并不总是 GDI 颜色。如果设置了最高字节,则具有特殊含义,通常用于系统颜色,例如clBtnFace。这就是为什么你有 Vcl.Graphics.ColorToRGB() 等函数的原因。clDefault 是这些特殊颜色之一。
    猜你喜欢
    • 2018-10-22
    • 2011-09-03
    • 2014-04-09
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多