在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。
//参数说明:
//AClass:需要获取祖先类的类 //ASeries:是一个字符串列表,用来存放返回的祖先类及其所在单元的名称 procedureGetInheritanceSeries(AClass:TClass;outASeries: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; untilnotPClass.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) 补充说明 注意上术代码中GetTypeData(PClass.ClassInfo);的使用,必须保证该类是从TPersistent类的派生类才可以这么使用,否则会抛出地址访问错误的。 http://cmao.iteye.com/blog/2246009 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论