如何获取系统颜色的 RGB 值?
How to get RGB values for a system color?
我一直使用 GetRValue
、GetGValue
和 GetBValue
函数(来自 Winapi.Windows
单元)来提取 TColor
的 RGB 值。
不幸的是,同样的方法似乎并不适用于 system colors,例如 clWindow
、clBtnFace
等等。
例如:
var
MyColor : TColor;
begin
MyColor := clBtnFace;
ShowMessage(
'R = ' + IntToStr(GetRValue(MyColor)) + sLineBreak +
'G = ' + IntToStr(GetGValue(MyColor)) + sLineBreak +
'B = ' + IntToStr(GetBValue(MyColor))
);
end;
它产生以下输出:
R = 15
G = 0
B = 0
应该如下所示:
在我的系统上,我看到的是以下颜色:
使用Get(R|G|B)Value()
可以很好地处理系统颜色,您只需要先将它们转换为RGB。为此使用 ColorToRGB()
函数:
Converts a TColor value into an RGB representation of the color.
例如:
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;
我一直使用 GetRValue
、GetGValue
和 GetBValue
函数(来自 Winapi.Windows
单元)来提取 TColor
的 RGB 值。
不幸的是,同样的方法似乎并不适用于 system colors,例如 clWindow
、clBtnFace
等等。
例如:
var
MyColor : TColor;
begin
MyColor := clBtnFace;
ShowMessage(
'R = ' + IntToStr(GetRValue(MyColor)) + sLineBreak +
'G = ' + IntToStr(GetGValue(MyColor)) + sLineBreak +
'B = ' + IntToStr(GetBValue(MyColor))
);
end;
它产生以下输出:
R = 15
G = 0
B = 0
应该如下所示:
在我的系统上,我看到的是以下颜色:
使用Get(R|G|B)Value()
可以很好地处理系统颜色,您只需要先将它们转换为RGB。为此使用 ColorToRGB()
函数:
Converts a TColor value into an RGB representation of the color.
例如:
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;