delphi TColor格式底片

delphi TColor format Negative

希望这是一个简单的问题,但我找不到答案。我正在使用 Delphi TColor 并且一些颜色值为负。这有记录吗?我需要做一些颜色转换,例如,到 RGB。

例如:Label.Color=-16777188; //浅蓝色

谢谢

Delphi 定义 Windows 系统颜色,如

SysGradientInactiveCaption = TColor(SystemColor or cGRADIENTINACTIVECAPTION);

SystemColor = $FF000000;

cGRADIENTINACTIVECAPTION = 28;

结果为 -16777188。

这些常量可以在 System.UITypes.pasTColorRec 下找到。

负值不是实际的 RGB 颜色,而是 Windows 可变的系统颜色。

例如,以下是实际的 RGB 颜色:

clRed   = [=10=]0000FF; {00BBGGRR}
clBlue  = [=10=]FF0000;
clWhite = [=10=]FFFFFF;
clBlack = [=10=]000000;

以下是一些系统颜色:

clWindow        = $FF000005;
clWindowText    = $FF000008;
clHighlight     = $FF00000D;
clActiveCaption = $FF000002;

这些不是实际的 RGB 值,而是代表您的系统颜色。通常,clWindow 是白色,clWindowText 是黑色,clHighlight 是某种蓝色等等,但是——同样——这些设置可以在 Windows 中更改。

当这些 32 位整数被解释为 有符号 32 位整数时,它们变为负数。这就是您所看到的:

clWindow        = -16777211;
clWindowText    = -16777208;
clHighlight     = -16777203;
clActiveCaption = -16777214;

所以在你的情况下,-16777188 不能保证是 "light bluish"。在十六进制中,此值为 $FF00001C,我将其识别为 clGradientInactiveCaption,即非活动无主题(Windows 9x 样式)window 标题栏的第二种渐变颜色。

如您所知,在 VCL 中,您可以像使用实际颜色一样使用这些系统颜色。但是——当然——您获得的实际颜色可能因用户而异。

您可以使用 ColorToRGB 函数从这样的系统颜色中获取实际的 RGB 颜色。在我的系统上,ColorToRGB(clGradientInactiveCaption) 产生 [=20=]F2E4D7(确实是浅蓝色)。