delphi - 如何将自定义属性添加到 FireMonkey 中动态(以编程方式)创建的控件?
问题描述
在我正在构建的应用程序中,我正在动态添加控件以TFramedScrollbox
控制 Form。
这是我正在使用的代码:
pnlNew: TFlowLayout;
pnlNew := TFlowLayout.Create(sbMain);
pnlNew.Align := TAlignLayout.Top;
pnlNew.ClipChildren := True;
pnlNew.Parent := sbMain;
这段代码按预期工作。
但我想向这个以编程方式创建的控件添加动态属性,如 OrgHeight、CreateOrder、PrevControl 等。
这个怎么做?
TIA
解决方案
您可以在表单定义上方声明一个“插入器类”,如下所示:
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;
推荐阅读
- css - 文本输入 - 缩小到最小
- mysql - PHP 严格标准:ezSQL_mysql::escape() 的声明应与 /home 中的 ezSQLcore::escape() 兼容
- swift - 在swift 4中传递给它的变量的延迟函数的麻烦
- url - 关于Flutter url_launcher 以及如何控制其背后的WebView 的各种问题
- android - 处理一个包含多个列表和其他原语的对象(反序列化时需要一个列表,但得到了一个类 java.util.HashMap)
- php - Laravel 5.7 的 index.php 中定义的 LARAVEL_START const 的实际用法是什么?
- mysql - AGGREGATE SQL 函数上的 QueryDatabaseTable 错误
- bash - Bash:如何使用 for 循环创建映射?
- ios - 使用 GPUImage2 过滤视频流
- ios - 如何使用 Firebase 确保我的代码在 Swift 中按顺序运行?