你所面临的问题是: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;
使用'数组[0..3] TAlphaColor'。 – TLama 2015-02-09 16:26:31
我很慢。谢谢 – ThisGuy 2015-02-09 16:27:04
@TLama你可以做到这一点。但是,你会有不同的东西。 “Cardinal”数组而不是“TAlphaColors”数组。如果你想要一个'TAlphaColors'数组,因为你希望将它的成员传递给需要'TAlphaColors'参数的函数,那么你需要做一个额外的步骤。用'TAlphaColors.Create(状态[i])把它们全部包装起来似乎不是很有趣。特别是因为它足够简单,可以制作一系列“TAlphaColors”。 – 2015-02-09 16:38:41