有没有办法只根据名称来动态地创建表格; 这个概念是这样的。我有一个主窗体,并且通过一些用户选择,必须创建一些预定义窗体并停靠在主窗体上的页面控件上的Tabitems上。 我知道的形式的名字,我知道什么时候创建这些每个人,但我想知道如果一个过程调用创建这些形式,并没有在所有的这些信息的更好的方式我码。按名称动态创建表单?
其德尔福XE3 firemonkey,在Win 7
提前感谢所有帮助
有没有办法只根据名称来动态地创建表格; 这个概念是这样的。我有一个主窗体,并且通过一些用户选择,必须创建一些预定义窗体并停靠在主窗体上的页面控件上的Tabitems上。 我知道的形式的名字,我知道什么时候创建这些每个人,但我想知道如果一个过程调用创建这些形式,并没有在所有的这些信息的更好的方式我码。按名称动态创建表单?
其德尔福XE3 firemonkey,在Win 7
提前感谢所有帮助
显然对Firemonkey德尔福不会自动注册表单类是可用的名字,所以你首先需要像这样添加一些能够改变你的窗体类单位的末尾:
unit Form10;
[ ... ]
// Right before the final "end."
initialization
RegisterFmxClasses([TForm10]);
end.
这会自动注册TForm10
所以它可以通过名称。接下来,您可以使用这种代码通过它的类名在运行时创建的一种形式:
procedure TForm10.Button1Click(Sender: TObject);
var ObjClass: TFmxObjectClass;
NewForm: TCustomForm;
begin
ObjClass := TFmxObjectClass(GetClass(ClassName));
if ObjClass <> nil then
begin
NewForm := ObjClass.Create(Self) as TCustomForm;
if Assigned(NewForm) then
NewForm.Show;
end
end;
,当你有这方面的类引用您只能创建对象。要获得给定字符串名称的类引用,请致电FindClass
。在结果上调用构造函数。在编译器允许您访问所需的构造函数之前,您可能必须将结果键入到不同的元类中。在VCL,您可以使用TFormClass
,但普通的老式会工作,也因为所有FireMonkey对象是TComponent
后裔;最重要的部分是你可以访问正确的构造函数,这就是你需要的构造函数的介绍。
它仅适用于已类注册。你的表单类应该由Delphi自动注册,但如果他们没有,你可以打电话RegisterClasses
手动或RegisterFmxClasses
如果你需要把你的班级群。
谢谢你的帮助,但与firemonkey.There的一个问题是没有TFormClass获得类名,它在delph.about示例中。在findClass的程序,返回TPersistentClass类型,我不能强制转换它TForm的,我无法通过新的形式owner.Any想法? – ManosM
不要输入到TForm;结果不是那种类型。类型转换为* metaclass *类型。 VCL和FMX之间的差异并不大。 –