我正在尝试使用一组常量的颜色。但是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
);
答案 0 :(得分:3)
你遇到的问题是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;