2015-02-09 66 views
2

我正在尝试使用常数的颜色数组。但德尔福不断给我编译错误。我似乎无法找出我做错了什么......颜色阵列

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 
          ); 
+3

使用'数组[0..3] TAlphaColor'。 – TLama 2015-02-09 16:26:31

+0

我很慢。谢谢 – ThisGuy 2015-02-09 16:27:04

+0

@TLama你可以做到这一点。但是,你会有不同的东西。 “Cardinal”数组而不是“TAlphaColors”数组。如果你想要一个'TAlphaColors'数组,因为你希望将它的成员传递给需要'TAlphaColors'参数的函数,那么你需要做一个额外的步骤。用'TAlphaColors.Create(状态[i])把它们全部包装起来似乎不是很有趣。特别是因为它足够简单,可以制作一系列“TAlphaColors”。 – 2015-02-09 16:38:41

回答

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; 
+0

感谢您的所有信息和澄清! – ThisGuy 2015-02-09 18:41:23