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

我正在尝试使用一个恒定的颜色数组。但是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
。事实上,这是该语言最大的挫折之一,您无法在该记录类型的记录中声明嵌套常量。这些常数是序数真常数

请注意,记录本身在记录的变体部分中包含数据。感兴趣的字段是
颜色
字段。因此,您可以这样声明常量数组:

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
数组非常简单。感谢您提供的所有信息和说明!