gpt4 book ai didi

delphi - 颜色阵列

转载 作者:行者123 更新时间:2023-12-01 21:32:08 28 4
gpt4 key购买 nike

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

请注意,记录本身在记录的变体部分中具有数据。感兴趣的字段是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;

关于delphi - 颜色阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28414382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com