欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Delphi中获取某类的祖先类及其所在单元名称

程序员文章站 2022-06-07 08:57:15
...

前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。

Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi //参数说明:
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi 
//AClass:需要获取祖先类的类
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi 
//ASeries:是一个字符串列表,用来存放返回的祖先类及其所在单元的名称
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi 
procedureGetInheritanceSeries(AClass:TClass;outASeries:TStringList);
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi var
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PTD:PTypeData;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PTI:PTypeInfo;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PClass:TClass;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi begin
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi ASeries.Clear;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PClass:
=TButton;
if not PClass.InheritsFrom(TPersistent) then Exit;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PTD:
=GetTypeData(PClass.ClassInfo);
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi ASeries.Add(Format(
'%s(%s)',[PClass.ClassName,PTD.UnitName]));
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi repeat
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PTD:
=GetTypeData(PClass.ClassInfo);
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PTI:
=PTD.ParentInfo^;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi ASeries.Insert(
0,Format('%s(%s)',[PTI^.Name,PTD.UnitName]));
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi PClass:
=PClass.ClassParent;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi untilnotPClass.InheritsFrom(TPersistent);
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi end;

使用举例

Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi //获取TButton类的所有祖先类及其所在单元名称
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi 
var
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi sl:TStringList;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi begin
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi sl:
=TStringList.Create;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi 
try
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi GetInheritanceSeries(TButton,sl);
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi Memo1.Lines.AddStrings(sl);
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi 
finally
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi sl.Free;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi end;
Delphi中获取某类的祖先类及其所在单元名称
            
    
    博客分类: Delphi delphi end;

返回结果如下:

TObject(Classes)
TPersistent(Classes)
TComponent(Controls)
TControl(Controls)
TWinControl(StdCtrls)
TButtonControl(StdCtrls)
TButton(StdCtrls)

补充说明

注意上术代码中GetTypeData(PClass.ClassInfo);的使用,必须保证该类是从TPersistent类的派生类才可以这么使用,否则会抛出地址访问错误的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关标签: delphi