2015-02-09 69 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