颜色数组
Array of Colors
我正在尝试使用一组常量颜色。但是 Delphi 一直给我编译错误。我似乎无法弄清楚我做错了什么......
const
Statuses : array[0..3] of TAlphaColors =
(
TAlphaColors.Lightgray, //error here: says insert a '(', even though I already have one
TAlphaColors.Yellow,
TAlphaColors.Limegreen,
TAlphaColors.Blue
);
您面临的问题是 TAlphaColor.Lightgray
,实际上您命名的所有其他 TAlphaColor.XXX
都是序数真常量。而 TAlphaColors
是记录类型。
我们来看看相关定义:
type
TAlphaColor = type Cardinal;
TAlphaColorRec = record
const
Alpha = TAlphaColor($FF000000);
Aliceblue = Alpha or TAlphaColor($F0F8FF);
Antiquewhite = Alpha or TAlphaColor($FAEBD7);
.... many more color constant omitted
constructor Create(const Color: TAlphaColor);
class var ColorToRGB: function (Color: TAlphaColor): Longint;
case LongWord of
0:
(Color: TAlphaColor);
2:
(HiWord, LoWord: Word);
3:
{$IFDEF BIGENDIAN}
(A, R, G, B: System.Byte);
{$ELSE}
(B, G, R, A: System.Byte);
{$ENDIF}
end;
所以常量不是TAlphaColorRec
类型。实际上,您无法在属于该记录类型的记录中声明嵌套常量,这是该语言最大的挫败感之一。这些常量是有序的真常量。
请注意,记录本身在记录的变体部分中有数据。感兴趣的字段是 Color
字段。所以,你可以像这样声明你的常量数组:
const
Statuses : array[0..3] of TAlphaColors = (
(Color: TAlphaColors.Lightgray),
(Color: TAlphaColors.Yellow),
(Color: TAlphaColors.Limegreen),
(Color: TAlphaColors.Blue)
);
要是 Embarcadero 有先见之明让我们写出这样的代码就好了:
type
TMyRecord = record
public
const
MyConst: TMyRecord = ();
end;
我正在尝试使用一组常量颜色。但是 Delphi 一直给我编译错误。我似乎无法弄清楚我做错了什么......
const
Statuses : array[0..3] of TAlphaColors =
(
TAlphaColors.Lightgray, //error here: says insert a '(', even though I already have one
TAlphaColors.Yellow,
TAlphaColors.Limegreen,
TAlphaColors.Blue
);
您面临的问题是 TAlphaColor.Lightgray
,实际上您命名的所有其他 TAlphaColor.XXX
都是序数真常量。而 TAlphaColors
是记录类型。
我们来看看相关定义:
type
TAlphaColor = type Cardinal;
TAlphaColorRec = record
const
Alpha = TAlphaColor($FF000000);
Aliceblue = Alpha or TAlphaColor($F0F8FF);
Antiquewhite = Alpha or TAlphaColor($FAEBD7);
.... many more color constant omitted
constructor Create(const Color: TAlphaColor);
class var ColorToRGB: function (Color: TAlphaColor): Longint;
case LongWord of
0:
(Color: TAlphaColor);
2:
(HiWord, LoWord: Word);
3:
{$IFDEF BIGENDIAN}
(A, R, G, B: System.Byte);
{$ELSE}
(B, G, R, A: System.Byte);
{$ENDIF}
end;
所以常量不是TAlphaColorRec
类型。实际上,您无法在属于该记录类型的记录中声明嵌套常量,这是该语言最大的挫败感之一。这些常量是有序的真常量。
请注意,记录本身在记录的变体部分中有数据。感兴趣的字段是 Color
字段。所以,你可以像这样声明你的常量数组:
const
Statuses : array[0..3] of TAlphaColors = (
(Color: TAlphaColors.Lightgray),
(Color: TAlphaColors.Yellow),
(Color: TAlphaColors.Limegreen),
(Color: TAlphaColors.Blue)
);
要是 Embarcadero 有先见之明让我们写出这样的代码就好了:
type
TMyRecord = record
public
const
MyConst: TMyRecord = ();
end;