`
禹爸爸
  • 浏览: 87497 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

阅读更多

前几天在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)
TPersistent(Classes)
TComponent(Controls)
TControl(Controls)
TWinControl(StdCtrls)
TButtonControl(StdCtrls)
TButton(StdCtrls)

补充说明

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

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

分享到:
评论

相关推荐

    在Delphi中获取本机的IP地址和计算机名称

    首先,我们需要引入`Winsock`单元,它是Delphi中处理网络通信的基础。在`Unit1.pas`文件中,添加`uses`语句导入`Winsock`: ```delphi uses Winsock; ``` 接着,创建一个`TServerSocket`或`TClientSocket`组件到...

    Delphi获取本机IP、名称、网卡MAC等信息..rar

    你可以使用`TIdStack`组件,这是Indy库的一部分,Delphi中通常会包含这个库。以下是一个简单的示例,展示如何获取本地IP地址: ```delphi uses IdStack; var IP: string; begin IP := TIdStack.HostByName('...

    delphi 获取窗口信息

    本文将详细讲解如何在Delphi中获取窗口信息,包括窗口的属性、大小、位置以及与之相关的控件信息。 首先,我们需要了解几个核心的Windows API函数,这些函数是Delphi获取窗口信息的基础。Windows API提供了大量的...

    Delphi获取某月份的最后一天是多少..rar

    总结来说,在Delphi中获取某月份的最后一天,可以利用DateUtils单元提供的MonthDays函数或结合IncMonth和DayOf函数来实现。这些工具可以帮助开发者轻松处理日期和时间相关的计算,提高程序的效率和准确性。在编写...

    Delphi获取和修改计算机名称..rar

    在Delphi中,我们可以调用Windows API函数来完成获取和设置计算机名称的任务。 1. **获取计算机名称** 获取计算机名称可以使用`GetComputerName` API函数,该函数位于`kernel32.dll`库中。以下是一个简单的示例: ...

    Delphi获取打印机列表信息

    在Delphi中,我们可以创建一个自定义记录类型来匹配`PRINTER_INFO_2`结构,该结构包含了打印机的详细信息,如名称、共享状态、端口等。然后,通过`EnumPrinters`函数遍历打印机,并将结果保存到一个TStringList或...

    DELPHI获取电脑硬件信息

    6. **示例代码**: 项目中的`demo.bdsproj`是DELPHI项目的配置文件,`demo.cfg`可能是应用配置文件,`HardwareInfo.dcu`是编译后的单元文件,可能包含了硬件信息获取的实现。`MainForm.dcu`和`.dfm`是主窗体的编译后...

    Delphi获取TRichEdit控件光标所在的行号..rar

    这个教程就是针对这个需求,教你如何在Delphi中实现获取TRichEdit控件光标位置的行号。 首先,了解TRichEdit控件的基本属性和方法。TRichEdit有一个名为SelStart的属性,它表示光标或选区的起始位置(以字符数计算...

    delphi获取文件大小

    在Delphi中,可以使用`TFile`或`TFileSystem`类(自Delphi XE7起引入)来获取文件大小,也可以使用更传统的`SysUtils`单元中的`GetFileSize`函数。以下是两种方法的详细说明: 1. 使用`TFile`类: `TFile`类提供了...

    delphi源码获取指定类型的文件数量

    在Delphi编程环境中,获取指定类型的文件数量是一项常见的任务,特别是在处理文件系统操作时。这个任务通常涉及到遍历目录,筛选特定扩展名的文件,并计算它们的数量。以下是一些关于如何实现这一功能的关键知识点:...

    delphi7获取文件大小

    在Delphi 7编程环境中,获取文件或文件夹的大小是一项基本操作,这对于文件管理、数据统计或资源分析等场景非常关键。以下是如何在Delphi 7中实现这个功能的详细步骤和相关知识点: 首先,我们需要理解文件大小的...

    DELPHI获取网卡MAC地址.pdf

    DELPHI获取网卡MAC地址 DELPHI获取网卡MAC地址是一个常见的网络编程任务,本文将详细介绍如何使用DELPHI语言获取网卡的MAC地址。 获取网卡MAC地址的方法 DELPHI获取网卡MAC地址有多种方法,本文将介绍两种常见的...

    Delphi7获取指定的临时文件所在目录和文件名.rar

    Delphi7获取指定的临时文件所在目录和文件名,获取临时文件目录、临时文件地址、临时文件名等信息。  临时目录位置:  PChar(edit2.text), 文件名前缀  0, 该数字由系统根据当前时间生成  @s1 生成的临时...

    Delphi获取和设置汉字输入法.rar

    Delphi 获取系统中已安装的中文输入法,判断是否在中文状态,若是则关闭它,切换半角和全角模式,切换中文标点模式和英文标点模式,并对输入法做相关设置。以下是相关代码:  procedure TForm1.closecid;  var  ...

    delphi获取控件句柄,并获取属性源码

    本示例代码可能是关于如何在Delphi中获取鼠标指定位置的控件句柄,并进一步读取该控件的类名和属性值。 首先,我们需要了解如何在Delphi中获取鼠标位置。通常,这可以通过处理`WM_MOUSEMOVE`消息来实现。`WM_...

    Delphi获取网络中的SQL服务器名称..rar

    - **ADO (ActiveX Data Objects)**:Delphi中常用ADO组件来访问数据库,它提供了一种标准的方式来连接和操作SQL Server。 - **ODBC (Open Database Connectivity)**:另一种方式是通过ODBC数据源,使用ODBC驱动...

    DELPHI获取鼠标当前句柄并执行操作

    在 DELPHI 开发环境中,有时我们需要实现一种功能:当鼠标移动到某个窗口或控件上时,能够获取到鼠标的当前位置,并对相应的窗体进行特定的操作。标题“DELPHI获取鼠标当前句柄并执行操作”正是描述了这样一个功能。...

    Delphi编程获取汉字拼音(简拼、全拼皆可)单元

    Delphi编程获取汉字拼音(简拼、全拼皆可)单元 1.支持D7——D2010(XE没有测试过,但是应该没有问题); 2.支持全拼和简拼获取; 3.支持的汉字非常全面; 使用说明:1.在项目中需要的地方引用Spell单元; 2.调用...

    delphi 10.3 获取电脑唯一码

    Windows系统提供了全局唯一标识符(GUID),可通过`UuidCreate`函数创建,或者通过WMI查询`Win32_ComputerSystemProduct`类获取UUID。 5. **集成所有信息**: 为了提高唯一性的可靠性,通常会将上述多种信息进行...

    Delphi获取窗口文本..rar

    这个"Delphi获取窗口文本"的压缩包可能包含了示例代码或教程,帮助开发者了解如何在Delphi中实现这一功能。让我们深入探讨Delphi中获取窗口文本的技术和相关知识点。 1. **Windows API调用**:Delphi作为一个基于...

Global site tag (gtag.js) - Google Analytics