如何获取系统颜色的RGB值?
我一直使用GetRValue,GetGValue和GetBValue函数(来自Winapi.Windows单元)来提取TColor.
不幸的是,同样的方法似乎不适用于系统颜色,例如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
乙 = 0
应该是这样的:
在我的系统上,我看到的是以下颜色:
回答
使用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;