Delphi中获取某类的祖先类及其所在单元名称
2007-11-17 21:09
267 查看
前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。
//参数说明:
//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;
使用举例
//获取TButton类的所有祖先类及其所在单元名称
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类的派生类才可以这么使用,否则会抛出地址访问错误的。
//参数说明:
//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;
使用举例
//获取TButton类的所有祖先类及其所在单元名称
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中获取某类的祖先类及其所在单元名称(使用GetTypeData(PClass.ClassInfo)函数,并且该类是从TPersistent类的派生类才可以这么使用)
- 用来获取指定类的所有祖先类的名称及其所在的单元名称。
- Delphi中获取应用程序所在目录(建议使用1024*768)
- delphi 获取文件所在路径
- 百度地图JS API获取到所在位置名称
- Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
- 获取bash文件所在的目录绝对路径以及获取函数方法名称
- delphi 通过点击获取控件名称
- SQL Server 2008中获取数据库所有表及其字段名称、类型、长度的SQL
- Delphi中获取程序所在目录
- Delphi获取默认打印机名称及端口
- 通过Linq来获取数据库中的所有表及其字段名称
- QT QString根据路径获取文件名称以及所在文件夹等信息
- 如何在.net中获取电脑名称,IP地址,用户名,计算机所在域名
- 如何获取当前应用app所在的进程id和进程名称
- python 获取网卡名称及其IP地址
- delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)
- SQL Server 2008中获取数据库所有表及其字段名称、类型、长度的SQL
- Delphi 获取 Cpu 序列号单元