Delphi 颜色数组
我正在尝试使用一个恒定的颜色数组。但是Delphi一直给我编译错误。我似乎不知道我做错了什么Delphi 颜色数组,delphi,delphi-xe7,Delphi,Delphi Xe7,我正在尝试使用一个恒定的颜色数组。但是Delphi一直给我编译错误。我似乎不知道我做错了什么 const Statuses : array[0..3] of TAlphaColors = ( TAlphaColors.Lightgray, //error here: says insert a '(', even though I already have one
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
。事实上,这是该语言最大的挫折之一,您无法在该记录类型的记录中声明嵌套常量。这些常数是序数真常数
请注意,记录本身在记录的变体部分中包含数据。感兴趣的字段是颜色
字段。因此,您可以这样声明常量数组:
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;
使用TAlphaColor的
数组[0..3]
@TLama可以做到这一点。但是你会有一些不同的东西。由Cardinal
组成的数组,而不是TAlphaColors
组成的数组。如果您想要一个TAlphaColors
数组,因为您希望将其成员传递给需要TAlphaColors
参数的函数,那么您需要执行额外的步骤。用TAlphaColors.Create(status[i])
将它们全部包装起来似乎没有什么乐趣。特别是因为制作一个TAlphaColors
数组非常简单。感谢您提供的所有信息和说明!