Delphi中获取某类的祖先类及其所在单元名称
来源:互联网 发布:四季优美最大骗局知乎 编辑:程序博客网 时间:2024/05/16 11:01
前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。
http://blog.csdn.net/chris_mao/article/details/1890434
//参数说明:
//AClass: 需要获取祖先类的类
//ASeries: 是一个字符串列表,用来存放返回的祖先类及其所在单元的名称
procedure GetInheritanceSeries(AClass: TClass; out ASeries: TStringList);
var
PTD: PTypeData;
PTI: PTypeInfo;
PClass: TClass;
begin
ASeries.Clear;
PClass := TButton;
//AClass: 需要获取祖先类的类
//ASeries: 是一个字符串列表,用来存放返回的祖先类及其所在单元的名称
procedure GetInheritanceSeries(AClass: TClass; out ASeries: TStringList);
var
PTD: PTypeData;
PTI: PTypeInfo;
PClass: TClass;
begin
ASeries.Clear;
PClass := TButton;
if not PClass.InheritsFrom(TPersistent) then Exit;
PTD := GetTypeData(PClass.ClassInfo);
ASeries.Add(Format('%s(%s)', [PClass.ClassName, PTD.UnitName]));
repeat
PTD := GetTypeData(PClass.ClassInfo);
PTI := PTD.ParentInfo^;
ASeries.Insert(0, Format('%s(%s)', [PTI^.Name, PTD.UnitName]));
PClass := PClass.ClassParent;
until not PClass.InheritsFrom(TPersistent);
end;
PTD := GetTypeData(PClass.ClassInfo);
ASeries.Add(Format('%s(%s)', [PClass.ClassName, PTD.UnitName]));
repeat
PTD := GetTypeData(PClass.ClassInfo);
PTI := PTD.ParentInfo^;
ASeries.Insert(0, Format('%s(%s)', [PTI^.Name, PTD.UnitName]));
PClass := PClass.ClassParent;
until not PClass.InheritsFrom(TPersistent);
end;
使用举例
//获取TButton类的所有祖先类及其所在单元名称
var
sl: TStringList;
begin
sl := TStringList.Create;
try
GetInheritanceSeries(TButton, sl);
Memo1.Lines.AddStrings(sl);
finally
sl.Free;
end;
end;
var
sl: TStringList;
begin
sl := TStringList.Create;
try
GetInheritanceSeries(TButton, sl);
Memo1.Lines.AddStrings(sl);
finally
sl.Free;
end;
end;
返回结果如下:
TObject(Classes)
TPersistent(Classes)
TComponent(Controls)
TControl(Controls)
TWinControl(StdCtrls)
TButtonControl(StdCtrls)
TButton(StdCtrls)
补充说明
注意上术代码中GetTypeData(PClass.ClassInfo);的使用,必须保证该类是从TPersistent类的派生类才可以这么使用,否则会抛出地址访问错误的。
- Delphi中获取某类的祖先类及其所在单元名称
- Delphi中获取某类的祖先类及其所在单元名称
- 用来获取指定类的所有祖先类的名称及其所在的单元名称。
- 获取单元格所在列的名称
- Delphi中获取程序所在目录
- java类中获取属性的名称
- java类中获取属性的名称 .
- Delphi获取焦点所在的控件名
- delphi——TGauge类的定义在哪个单元中定义的?
- delphi中uses单元引入的区别
- 获取类所在的classpath绝对路径
- delphi 获得程序名称及所在路径
- Delphi 获取 Cpu 序列号单元
- delphi 获取程序所在目录
- delphi 获取文件所在路径
- delphi 获取文件所在路径
- delphi 获取文件所在路径
- delphi 获取文件所在路径
- 想学pb,用一个礼拜的时间
- 微软笔试题
- Apache禁止目录访问方法介绍
- Java排序算法
- 模板匹配原理与实现
- Delphi中获取某类的祖先类及其所在单元名称
- c++实现数据结构九 优先级队列
- 关于Proc中嵌入式SQL的关键字"INDICATOR ”
- 各种语言正则表达式语法比较
- ant使用初步
- 详解iostat -dx 1命令监控IO性能
- Apache 配置虚拟目录
- 字典树,后缀树
- 模式匹配算法