我还没有找到真正满意的答案这个问题 https://stackoverflow.com/questions/691989/full-vcl-class-browser-for-delphi,现在正在考虑推出自己的。我有 ModelMaker 和 GExperts,但似乎都没有加载综合的我正在寻找的类层次结构。同样,我不认为 DevExpress 的人会分叉 CDK 代码来编译完整的类列表以继承......;-)
SO...
If ALL我想做的是建立一个所有注册组件类的自引用表(甚至包括非组件的所有类,如果这同样简单/可能的话),那么最好的方法是什么?
注意:我真的不需要属性/方法详细信息;我可以将类名(和父级名称)的完整列表存储到表中并放入树视图中。不过,除此之外的任何信息都非常受欢迎,可以作为奖励信息。 :-)
稍后更新:
在我的“最近”部分中出现的一个答案,但不是在这个问题上(也许他们删除了它?),是这样的:
“您可能想看看组件搜索的代码,它可以帮助您枚举所有已安装的组件。”
该代码可用吗?是吗,它藏在哪里呢?研究起来会很有趣。
不幸的是,实现 RegisterClass 机制的代码隐藏在 Classes 实现部分。
如果您需要它来获取 IDE 中安装的组件列表,您可以编写一个设计包,将其安装到 IDE 中并在 ToolsAPI 单元中使用 IOTAPackageServices。这将为您提供已安装的软件包及其组件的列表。
注意:您必须将 designide.dcp 添加到“requires”子句中才能使用 Delphi 的内部单元(如 ToolsAPI)。
需要做更多工作,但更通用的方法是枚举所有已加载的模块。您可以在包模块上调用 GetPackageInfo (SysUtils) 来枚举包含的单元名称和所需的包。但是,这不会为您提供包中包含的类的列表。
您可以枚举包的导出函数列表(例如,在JCL http://jcl.delphi-jedi.org/)并搜索这样命名的人:
@<unit_name>@<class_name>@
例如:“@System@TObject@”。
通过使用函数名称调用 GetProcAddress,您可以获得 TClass 引用。从那里您可以使用 ClassParent 遍历层次结构。通过这种方式,您可以枚举运行用运行时包编译的 Delphi 可执行文件的进程中加载的所有包中的所有类(Delphi IDE 也是如此)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)