Delphi XE增强的RTTI妙用--动态创建包中的窗口类
来源:互联网 发布:淘宝看历史价格 编辑:程序博客网 时间:2024/06/05 04:32
以前要在运行时创建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;
- Delphi XE增强的RTTI妙用--动态创建包中的窗口类
- Delphi XE增强的RTTI妙用--动态创建包中的窗口类
- Delphi XE增强的RTTI妙用--动态创建包中的窗口类
- Delphi XE增强的RTTI妙用--动态创建包中的窗口类
- elphi XE增强的RTTI与旧时创建类方便性区别--动态创建包中的窗口类
- Delphi XE的RTTI增强,动态Hook某些内部事件
- Delphi RTTI 动态创建Form
- MFC中的的RTTI和动态创建
- Delphi中"包"的妙用
- Delphi中的动态包
- Delphi中的动态包
- Delphi中的动态包
- Delphi中的动态包
- Delphi中的动态包
- Delphi中的动态包
- Delphi中的动态包
- Delphi中的动态包
- Delphi中的动态包
- 网站分析基础概念之新近度
- Oracle 锁表处理
- [Expression Blend 4] [SketchFlow系列] Chapter 2 瞭解SketchFlow Map (中)
- Buffer busy waits
- php输出echo、print、print_r、printf、sprintf、var_dump比较
- Delphi XE增强的RTTI妙用--动态创建包中的窗口类
- Java程序设计教程实验手册(Deitel and Deitel)
- MFC中句柄与指针
- Apostrophe not preceded by \ (in CREATE TABLE tb_cammonitor_configs (
- C# ASP.NET 控制windows服务的 开启和关闭 以及重启
- Filter拦截跳出FrameSet
- [Expression Blend 4] [SketchFlow系列] Chapter 3 瞭解SketchFlow Map (下)
- 一个好的程序员应该具备的能力(这也是面试时考察求职者的能力)
- sourcegrid合并单元格查询绑定数据