delphi – FireMonkey使用RTTI在运行时获取FMXObjects

我试图获取(使用RTTI)我的应用程序中的表单,以便在运行时基于表单Name创建它们.

我已经声明了{$TYPEINFO ON}编译器指令,我编码:

 lRttiType := pRttiContext.FindType ('Forms.tForm');

但我得到一个零结果.

‘Forms.tForm’应该是表单名称?

任何帮助将不胜感激.

最佳答案 正如
documentation所说:

TRttiContext.FindType, which looks up the type information based on the qualified type name. The qualified type name is made up of two components: unit name, separated by the dot character from the type name (for example, Classes.TStrings).

Firemonkey框架的TForm的完整QualifiedName将是:FMX.Forms.TForm

请注意,QualifiedName区分大小写.

lRttiType := pRttiContext.FindType ('FMX.Forms.TForm'); // this finds the TRttiType
lRttiType := pRttiContext.FindType ('fmx.forms.TForm'); // this will return nil

另请注意,FMX.Forms.TForm是一个TPersistent后代,使用{$M}指令编译,该指令是{$TYPEINFO ON}的别名.因此,您无需启用它来访问TForm RTTI

点赞