Delphi 为什么TPanel';s颜色属性在使用十六进制颜色值时显示错误的颜色?
我使用的是Delphi 2010,如果我创建了一个新的VCL应用程序,在表单上放置一个TPanel,并将其“color”属性设置为“clInactiveCaptionText”,它将显示正确的颜色 正确的颜色: 但是,如果我为这个颜色输入十六进制值($00434E54---R67,G78,B84),它会错误地显示出来。我应该注意,无论是否启用运行时主题,结果都是一样的 颜色错误:Delphi 为什么TPanel';s颜色属性在使用十六进制颜色值时显示错误的颜色?,delphi,Delphi,我使用的是Delphi 2010,如果我创建了一个新的VCL应用程序,在表单上放置一个TPanel,并将其“color”属性设置为“clInactiveCaptionText”,它将显示正确的颜色 正确的颜色: 但是,如果我为这个颜色输入十六进制值($00434E54---R67,G78,B84),它会错误地显示出来。我应该注意,无论是否启用运行时主题,结果都是一样的 颜色错误: 知道为什么在指定十六进制值时不能正确显示此颜色吗?RGB颜色值实际上被指定为BGR 因此,如果你想: 红色您需
知道为什么在指定十六进制值时不能正确显示此颜色吗?RGB颜色值实际上被指定为BGR 因此,如果你想:
- 红色您需要指定$000000FF
- 绿色您需要指定$0000FF00
- 蓝色您需要指定$00FF0000
TColor
值,或者Windows称之为COLORREF
),这就是为什么在指定自定义颜色代码时,您会获得不同的颜色
要在RGB表单中指定颜色时保持理智,可以使用Windows单元中的RGB()函数;这将以“自然的”/“直观的RGB顺序”(作为字节值)接受参数,并生成适当的TColor
/COLORREF
值:
MyPanel.Color := RGB(67, 78, 84);
或者如果hex更容易:
MyPanel.Color := RGB($43, $4E, $54);
实际上,Tcolor是RGBA颜色格式,并且
$FF000000
是alpha通道,因此:
- 要得到红色香奈儿,你可以得到$000000FF
- 要获得绿色香奈儿,您可以获得$0000FF00
- 要获得bluechanel,您可以获得$00FF0000
- 要获得阿尔法香奈儿香奈儿,您可以获得FF000000美元
IntToHex(ColorPanel1.Color,1)
这也适用于跨平台FMX delphi应用程序
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');
非常感谢。按照您的指示,我将颜色更改为$00544E43,并且它的工作方式与应有的一样。+1表示注意事项。我记得我第一次遇到这件事的时候就发疯了。