使用十六进制颜色值时,为什么TPanel的颜色属性显示错误的颜色?

Mic*_*ick 7 delphi

我正在使用Delphi 2010,如果我创建一个新的VCL应用程序,在表单上放一个TPanel并将其"color"属性设置为"clInactiveCaptionText"它会显示正确的颜色.

颜色正确:

在此输入图像描述

但是,如果我输入此颜色的十六进制值($ 00434E54 --- R 67,G 78,B 84),则显示不正确.我应该注意,无论是否启用运行时主题,结果都是一样的.

颜色错误:

在此输入图像描述

在指定其十六进制值时,为什么它不能正确显示这种颜色?

Mar*_*ema 19

RGB颜色值实际上指定为BGR.

所以,如果你想:

  • 红色你需要指定$ 000000FF
  • 绿色你需要指定$ 0000FF00
  • 蓝色你需要指定$ 00FF0000


Del*_*ics 17

正如其他人所指出的那样,RGB值在内部存储为BGR(即TColor值,或Windows调用的值COLORREF),这就是为什么当您指定自定义颜色代码时,您获得不同的颜色.

为了在RGB格式中指定颜色时保持理智,可以使用Windows单元中的RGB()函数; 这接受"自然"/直观RGB顺序(作为字节值)的参数并产生适当的TColor/ COLORREF值:

  MyPanel.Color := RGB(67, 78, 84);
Run Code Online (Sandbox Code Playgroud)

或者如果十六进制更容易:

  MyPanel.Color := RGB($43, $4E, $54);
Run Code Online (Sandbox Code Playgroud)


RRU*_*RUZ 8

这是因为您要设置TColorRGB格式的值,而您必须使用BGR.