以前要在运行时创建package中的form类,必须要在form单元文件中这样注册类:
Initialization
RegisterClass(TForm3);
Finalization
UnRegisterClass(TForm3);
然后在调用模块中,通过FindClass或GetClass函数返回一个TPersistentClass,再通过此类引用创建窗口类:
AClass := GetClass(ClassName);
aForm :=
TCustomForm(AClass.Create).Create(Application);
现在,通过XE中增强的RTTI,也可以完成同样的工作。
首先,package中的申明form的单元文件中,不再需要调用RegisterClass注册窗口类,因为窗口类的RTTI信息,已经在编译时写入到了二进制文件中。
在调用模块中,可以这样进行创建窗口类:
var
LContext: TRttiContext;
LPackage: TRttiPackage;
LClass:
TRttiInstanceType;
aForm: TCustomForm;
begin
LContext :=
TRttiContext.Create;
for LPackage in LContext.GetPackages() do
begin
if SameText(ExtractFileName(LPackage.Name), 'Package1.bpl')
then
begin
LClass := LPackage.FindType('Unit3.TForm3') as
TRttiInstanceType;
aForm := LClass.MetaclassType.Create as
TCustomForm;
aForm.Create(Application);
aForm.Show;
aForm.BringToFront;
end;
end;
end;
http://hi.baidu.com/lzj1981/blog/item/1a8fc4ec860561c72e2e211f.html
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.036577939987183 seconds