我正在使用Delphi 2010,如果我创建一个新的VCL应用程序,在表单上放一个TPanel并将其“color”属性设置为“clInactiveCaptionText”,它会显示正确的颜色。
正确的颜色:
但是,如果我输入此颜色的十六进制值($ 00434E54 --- R 67,G 78,B 84),则显示不正确。我应该注意,无论是否启用运行时主题,结果都是一样的。
颜色错误:
在指定其十六进制值时,为什么它不能正确显示此颜色?
答案 0 :(得分:19)
RGB颜色值实际上指定为BGR。
所以,如果你想:
答案 1 :(得分:17)
正如其他人所指出的那样,RGB值在内部存储为 BGR (即TColor
值,或者Windows称为COLORREF
),这就是为什么当你指定一个自定义颜色代码,您获得不同的颜色。
为了在RGB格式中指定颜色时保持理智,可以使用Windows单元中的 RGB()功能;它接受“自然”/直观RGB顺序(作为字节值)的参数,并产生适当的TColor
/ COLORREF
值:
MyPanel.Color := RGB(67, 78, 84);
或者如果十六进制更容易:
MyPanel.Color := RGB($43, $4E, $54);
答案 2 :(得分:8)
这是因为您要设置RGB格式的TColor
值,而必须使用BGR。
答案 3 :(得分:0)
实际上Tcolor是RGBA颜色格式,$FF000000
也是alpha通道所以:
您可以轻松地将tcolor值转换为rgb:
IntToHex(ColorPanel1.Color,1)
这也适用于跨平台的FMX delphi应用程序。
答案 4 :(得分:0)
function HexToColor(sColor : string) : TColor;
begin
Result :=
RGB(
StrToInt('$'+Copy(sColor, 1, 2)),
StrToInt('$'+Copy(sColor, 3, 2)),
StrToInt('$'+Copy(sColor, 5, 2))
) ;
end;
使用这个简单的功能,您可以更轻松:
Panel1.Color := HexToColor ('16a086');