如何“扫描”当前安装的 VCL 组件的完整列表

2024-01-02

我还没有找到真正满意的答案这个问题 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(使用前将#替换为@)

如何“扫描”当前安装的 VCL 组件的完整列表 的相关文章

随机推荐

  • 查找与所有类别匹配的产品 (Rails 3.1)

    我正在努力处理 Rails 3 1 1 中的 ActiveRecord 查询 我有 2 个模型 产品和类别 从产品到类别有一个 has and belongs to many 一个产品可以有多个类别 我正在尝试编写一个搜索查询 它将找到具有
  • Jackrabbit Oak:入门并通过 RMI 连接到独立存储库

    我对长耳大野兔和长耳大野兔橡树完全陌生 不过 我与 Alfresco 进行了很多合作 这是另一个符合 JCR 的开源内容存储库 我想启动一个独立的 Jackrabbit Oak 存储库 然后通过 Java 代码连接到它 不幸的是 Oak 文
  • 使用 geom_smooth 将 glm 拟合到分数

    这篇文章有点相关这个帖子 https stackoverflow com questions 62974766 removing alpha transparency from ggplot legend and setting x axi
  • Java - 子类调用超级构造函数,该构造函数调用子类方法而不是它自己的方法

    我将从一个代码示例开始 class A public A f When accessed through super call this does not call A f as I had expected public void f I
  • Java 中的 Unicode 符号(箭头)

    我想在我的应用程序中使用以下符号作为按钮 箭头http img402 imageshack us img402 3176 arrowso jpg http img402 imageshack us img402 3176 arrowso j
  • 如何使用 Delphi 读取 Windows 事件日志的内容

    是否有一个类或函数允许您读取 Windows 事件日志 这是你打开后看到的日志事件vwr msc 理想情况下选择一个特定的日志 在我的例子中应用领域登录Windows日志 并根据日期和来源设置过滤器 您可以使用Win32 NTLogEven
  • 来自文字的静态 std::string 对象的宏

    假设我需要调用一个函数foo这需要一个常量std string我的代码中很多地方都引用了 int foo const std string foo bar foo baz 使用像这样的字符串文字调用函数将创建临时的std string对象
  • 在 adb logcat 输出中查看 Android 上 Qt 应用程序的日志记录的最简单方法是什么?

    NB I am notQtCreator 用户 我使用 qmake make 和 androiddeployqt 在构建脚本中构建 Android 应用程序 并使用 adb install 将它们部署到设备 我希望能够在 abd logca
  • git pre-commit hook,将文件添加到索引中

    我正在尝试编写一个简单的预提交挂钩来检查文件是否被修改 如果是 则压缩它并将其添加到当前索引中 如下所示 bin sh was the file modified mf git status grep jquery detectBrowse
  • 同步 AJAX 调用在 Chrome 中冻结之前的代码

    我想在执行同步 AJAX 调用时将按钮更改为加载状态 除了将按钮更改为加载状态的 jQuery 代码 在 Chrome 中 之外 它会冻结 直到 AJAX 调用完成 因此 加载状态将在 de ajax 调用后显示大约 1 毫秒 我在 JSF
  • OpenGL:快速离屏渲染

    我需要使用 OpenGL 在屏幕外渲染大量 数万 图像 我在Windows下运行并使用QT作为框架 解决方案只能是Windows 这并不重要 根据我使用谷歌的发现 有很多选择可以做到这一点本文 http www mesa3d org bri
  • 如何在python中将输入值与mysql数据库值进行比较

    所以我想将输入值与我的数据库值进行比较 如果输入值与数据库的值相同 我想print inputvalue 但如果不一样 我想print Data Does Not Exist 所以我尝试过这段代码 cur connection cursor
  • 是什么让 DCG 谓词变得昂贵?

    我正在构建一个定语从句语法来解析 20 000 段半自然文本 随着我的谓词数据库大小的增长 现在达到 1 200 条规则 解析字符串可能需要相当长的时间 特别是对于 DCG 目前无法解释的字符串 因为我尚未编码语法 对于包含 30 个单词的
  • 将 scotty 帖子的 do 替换为 >>=

    post introduceAnIdea do command lt jsonData json handle command 如何删除 do 并用 gt gt 更改它 post introduceAnIdea jsonData gt gt
  • 为什么网站的 MVC 需要单点入口?

    我看到许多网站的 MVC 实现都有一个单入口点 例如 index php 文件 然后解析 URL 以确定要运行哪个控制器 这对我来说似乎很奇怪 因为它涉及到必须使用 Apache 重写来重写 URL 并且页面足够多 单个文件会变得臃肿 为什
  • 什么是文件描述符,用简单的术语解释一下?

    与维基百科相比 文件描述符的更简化描述是什么 为什么需要它们 比如说 以shell进程为例 它是如何应用的呢 进程表是否包含多个文件描述符 如果是 为什么 简而言之 当您打开文件时 操作系统会创建一个条目来表示该文件并存储有关该打开文件的信
  • Circleci:pip install dlib 失败

    我有一个 python 项目需要dlib 我正在尝试设置 CircleCI 并编写我的config yml如下 Python CircleCI 2 0 configuration file Check https circleci com
  • NestJS:如何在 canActivate 中模拟 ExecutionContext

    我在模拟 Guard 中间件中的 ExecutionContext 时遇到问题 这是我的 RoleGuard 扩展 JwtGuard Injectable export class RoleGuard extends JwtAuthGuar
  • @Transactional注解

    之间有什么区别 为整个类添加 Transactional 注释 为每个方法添加 Transactional 注释 使用 spring 和 Hibernate 基本上 如果你用 Transactional http static spring
  • 如何“扫描”当前安装的 VCL 组件的完整列表

    我还没有找到真正满意的答案这个问题 https stackoverflow com questions 691989 full vcl class browser for delphi 现在正在考虑推出自己的 我有 ModelMaker 和