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

问题描述

在我正在构建的应用程序中,我正在动态添加控件以TFramedScrollbox控制 Form。

这是我正在使用的代码:

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

pnlNew.Parent := sbMain;

这段代码按预期工作。

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

这个怎么做?

TIA

标签: delphidynamicfiremonkey

解决方案


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

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 类”。TFlowLayout如果您在设计时已经在表单上有一个实例,您将不得不这样做。

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

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

推荐阅读