如何将自定义属性添加到 FireMonkey 中动态(以编程方式)创建的控件?

How to add custom properties to dynamically (programmatically) created controls in FireMonkey?

在我正在构建的应用程序中,我正在向表单上的 TFramedScrollbox 控件动态添加控件。

这是我正在使用的代码:

pnlNew: TFlowLayout;
pnlNew := TFlowLayout.Create(sbMain);
pnlNew.Align := TAlignLayout.Top;
pnlNew.ClipChildren := True;

pnlNew.Parent := sbMain;

并且此代码按预期工作。

但我想向这个以编程方式创建的控件添加动态属性,如 OrgHeight、CreateOrder、PrevControl 等。

如何操作?

TIA

您可以在表单定义上方声明一个“插入器 class”,如下所示:

TFlowLayout = class(FMX.Layouts.TFlowLayout) // note fully qualified name of the class we inherit from
private
  OrgHeight: single;
  //... other properties you want to add
end;

TForm36 = class(TForm)
  sbMain: TFramedScrollBox;
  Button1: TButton;
  //...

严格来说,在这种情况下,当您在运行时动态创建实例时,您实际上不需要在表单定义之前定义“interposer class”。如果在设计时您的表单上已经有一个 TFlowLayout 的实例,那么您将不得不这样做。

从现在开始,您在表单上实例化的 TFlowLayout 具有这些添加的属性,您可以编写例如:

pnlNew := TFlowLayout.Create(sbMain);
pnlNew.Align := TAlignLayout.Top;
pnlNew.ClipChildren := True;
pnlNew.Parent := sbMain;
pnlNew.OrgHeight := pnlNew.Height;
pnlNew.Height := 150;