为什么在FireMonkey Delphi应用程序中指定运行时颜色时会出现“未声明的标识符”?

3

我正在制作我的第一个FireMonkey应用程序。我创建了一个TRectangle网格,现在我想通过编程方式设置每个矩形的颜色。我已经完成了以下操作:

procedure TForm9.Button2Click(Sender: TObject);
var
  C : TRectangle;
  I : integer;
//const
//  Alpha = TAlphaColor($FF000000);
//  Red = Alpha or TAlphaColor($FF0000);

begin
  for I := 0 to ScaledLayout1.ChildrenCount-1 do
    begin
    If ScaledLayout1.Children[I] is TRectangle then
      begin
      C := Trectangle(ScaledLayout1.Children[I]);
      C.Fill.Color := Red; <<< ERROR
      C.Fill.Kind := bkSolid <<< ERROR;
      end;
    end;
end;

当我尝试分配常量“Red”和“bkSolid”时,出现编译器错误'unidentified identifier',并显示'<< ERROR'。如果我进入System.UITypes并像我注释掉的“const”那样复制'Red',则一切正常。然而,“System.UITypes”在我的使用列表中。尝试C.Fill.Color := TAlphaColor.Red也不起作用。请问我做错了什么?谢谢。

2个回答

4

TAlphaColor是cardinal类型,不是枚举或常量。 TAlphaColors.Red是可行的(请注意AlphaColorS后面的's')或者使用claRed。 使用TBrushKind.bkSolid来实现bkSolid。


谢谢Arjen。这是ENUMTYPES的组合(我以前没有遇到过)和手误。谢谢。 - Brian Frost
1
新的TEnumType.etThing风格对老手来说有些困惑,不是吗?我个人认为,在TBrushKind中使用“bk”前缀是错误的。要么使用没有前缀的新语法(类型和点后跟一个单词),要么使用前缀但不使用新的枚举语法。将它们结合起来是愚蠢的。但这是Embarcadero做的,所以我们只能接受这种愚蠢。 - Warren P

1
在 uses 子句中插入:

uses System.UIConsts

然后使用 ClaRed 代替 red,clawhite 代替 white 等等。
同时,使用 TBrushKind.bkSolid 代替 bksolid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接