你所面臨的問題是: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..3] TAlphaColor'。 – TLama 2015-02-09 16:26:31
我很慢。謝謝 – ThisGuy 2015-02-09 16:27:04
@TLama你可以做到這一點。但是,你會有不同的東西。 「Cardinal」數組而不是「TAlphaColors」數組。如果你想要一個'TAlphaColors'數組,因爲你希望將它的成員傳遞給需要'TAlphaColors'參數的函數,那麼你需要做一個額外的步驟。用'TAlphaColors.Create(狀態[i])把它們全部包裝起來似乎不是很有趣。特別是因爲它足夠簡單,可以製作一系列「TAlphaColors」。 – 2015-02-09 16:38:41