一系列的颜色

时间:2015-02-09 16:22:39

标签: delphi delphi-xe7

我正在尝试使用一组常量的颜色。但是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
                             );

1 个答案:

答案 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;