Delphi XE增强的RTTI妙用--动态创建包中的窗口类


本文整理自网络,侵删。

 以前要在运行时创建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;

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ddqqyy/archive/2011/02/05/6172867.aspx

相关阅读 >>

Delphi idhttp代理设置

Delphi ttabcontrol在tabitem添加关闭按钮

Delphi 防止刷新时闪烁的终极解决办法

Delphi 一行关键代码阻止360云查杀

Delphi读写utf-8、unicode格式文本文件

几个webbrowser相关的函数

Delphi通过调用com对象实现更改桌面壁纸

Delphi 取相同字符串 2种方法

Delphi 如何将颜色值转换为html格式?

Delphi使用进行post数据时超时设置

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...