gpt4 book ai didi

Delphi - 未找到 TListView 类

转载 作者:行者123 更新时间:2023-12-03 15:38:50 25 4
gpt4 key购买 nike

我们有一个 Delphi 5 应用程序,它是在没有运行时包、DLL 或外部资源(即单个可执行文件)的情况下构建的。当我们在客户端 PC 上安装它时,我们会收到以下错误消息:

Class TListView not found

Class TImage not found

我们之前已经在数十台电脑上安装过它,没有发生任何事故,但最新的安装有问题。

目标 PC 是全新安装的 Windows XP(Service pack 3),未安装其他软件。

它不会提示所有的类,而只会提示一两个类。例如 TPanel/TForm/TEdit 都可以。

谁能想到是什么原因造成的?

编辑

据我所知,新电脑上的 exe 存在于大约 30 台其他电脑上,包括 Windows XP Sp1、2、3、Windows Vista 和 Windows 嵌入式操作系统。新旧电脑都安装了旧版本,然后更新为最新版本。唯一的区别是最新安装的版本跳跃更高。

最佳答案

这通常是 .DFM 流式传输期间的错误。通常,此错误发生在 TLabel 组件中,因为许多人从表单或框架中删除 TLabel 字段,以减少困惑并减小表单的实例大小。然而,他们犯的常见且令人困惑的错误是,他们过于热心地删除了所有 TLabel 引用。那就是坏事开始发生的时候。让我来看看流系统如何定位组件的类。

请记住,.DFM 中的类引用只是一个字符串。流系统必须将此字符串转换为类引用 (TComponentClass)。流系统使用两种机制来执行此操作。第一个非常简单,涉及类引用的全局列表。您可以调用 RegisterClass 或 RegisterClasses 显式地让流系统意识到这一点。第二个要微妙得多,也不是很为人所知。事实上,这都是 Delphi 的“魔力”的一部分:-)。当编译器构建表单时,会处理表示表单上组件的所有字段,并构建内部表作为 RTTI 或表单/框架/数据模块本身的元数据的一部分。该表包含对组件字段表示的所有单独组件类型的引用列表。因此,即使某个组件不在全局列表中,仍然可以通过扫描此编译器生成的表来找到它。这就是 Classes.TReader.GetFieldClass() 方法的作用。

回到我的 TLabel 示例,只需确保给定组件类型中至少有一个具有字段即可轻松解决此问题。因此,只要至少存在 TLabel 类型的字段, 所有其他 TLabel 都可以正常加载。因此,就您的情况而言,请确保 TListView 或 TImage 字段尚未被删除。

关于Delphi - 未找到 TListView 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576968/

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