我试图获取(使用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