gpt4 book ai didi

delphi - 如何 "scan"当前安装的 VCL 组件的完整列表

转载 作者:行者123 更新时间:2023-12-03 15:07:20 26 4
gpt4 key购买 nike

我仍然没有找到真正令人满意的答案 this question ,现在正在考虑推出自己的。我有 ModelMaker 和 GExperts,但似乎都无法加载我正在寻找的全面类层次结构。同样,我不认为 DevExpress 的人会 fork CDK 代码来编译完整的类列表以继承......;-)

所以...

如果所有我想要做的是构建所有注册组件类的自引用表(甚至包括非组件的所有类,如果这同样简单/可能的话),那么会是什么这样做的最好方法是什么?

注意:我并不真正需要属性/方法详细信息;我可以将类名(和父级名称)的完整列表存储到表中并放入 TreeView 中。不过,除此之外的任何信息都非常受欢迎,可以作为奖励信息。 :-)

<小时/>

稍后更新:

在我的“最近”部分中出现的一个答案,但不是在问题上(也许他们删除了它?),是:

“你可能想要看一下组件搜索的代码,它可能会帮助您枚举所有已安装的组件。”

该代码可用吗?是吗,它藏在哪里呢?研究起来会很有趣。

最佳答案

不幸的是,实现RegisterClass机制的代码隐藏在Classes实现部分。

如果您需要它来获取 IDE 中安装的组件列表,您可以编写一个设计包,将其安装到 IDE 中并在 ToolsAPI 单元中使用 IOTAPackageServices。这将为您提供已安装的软件包及其组件的列表。

注意:您必须将 designide.dcp 添加到“requires”子句中才能使用 Delphi 的内部单元(如 ToolsAPI)。

需要更多工作,但更通用的方法是枚举所有已加载的模块。您可以在包模块上调用 GetPackageInfo (SysUtils) 来枚举包含的单元名称和所需的包。但是,这不会为您提供包中包含的类的列表。

您可以枚举包的导出函数列表(例如 JCL 中的 TJclPeImage )并搜索如下命名的函数:

@<unit_name>@<class_name>@

例如:“@System@TObject@”。

通过使用函数名称调用 GetProcAddress,您可以获得 TClass 引用。从那里您可以使用 ClassParent 遍历层次结构。这样您就可以枚举运行用运行时包编译的 Delphi 可执行文件的进程中加载​​的所有包中的所有类(Delphi IDE 也是如此)。

关于delphi - 如何 "scan"当前安装的 VCL 组件的完整列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/763232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com