如何获取系统颜色的 RGB 值?

Fab*_*zio 1 delphi colors systemcolors delphi-xe7

我一直使用GetRValue,GetGValueGetBValue函数(来自Winapi.Windows单元)来提取TColor.

不幸的是,同样的方法似乎不适用于系统颜色,例如clWindowclBtnFace等等。

例如:

var
  MyColor : TColor;
begin
  MyColor := clBtnFace;

  ShowMessage(
    'R = ' + IntToStr(GetRValue(MyColor)) + sLineBreak +
    'G = ' + IntToStr(GetGValue(MyColor)) + sLineBreak +
    'B = ' + IntToStr(GetBValue(MyColor))
  );
end;
Run Code Online (Sandbox Code Playgroud)

它产生以下输出:

R = 15

G = 0

乙 = 0

应该是这样的:

颜色RGB(15,0,0)图片

在我的系统上,我看到的是以下颜色:

在我的系统上呈现的颜色 clBtnFace 的图片

Rem*_*eau 6

使用Get(R|G|B)Value()系统颜色可以正常工作,您只需要先将它们转换为 RGB。使用该ColorToRGB()功能:

将 TColor 值转换为颜色的 RGB 表示。

例如:

var
  MyColor: TColor;
  RGB: Longint;
begin
  MyColor := ...; // any valid TColor value, whether RGB or system constant...
  RGB := ColorToRGB(MyColor);

  ShowMessage(
    'R = ' + IntToStr(GetRValue(RGB)) + sLineBreak +
    'G = ' + IntToStr(GetGValue(RGB)) + sLineBreak +
    'B = ' + IntToStr(GetBValue(RGB))
  );
end;
Run Code Online (Sandbox Code Playgroud)