问题标签 [tpersistent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1523 浏览

delphi - TPersistent + 接口,Delphi

我需要一个基于 TPersistent 的类(因此它存储 RTTI)并包括默认接口处理(QueryInterface、_AddRef、_Release)……我要查找的类名是什么?

0 投票
0 回答
292 浏览

delphi - 在 Delphi 7 中持久化多个对象

这不是重复,而是“ Windows XP/Delphi 7 中的持久对象”的后续

我需要在 Delphi 7 中持久化多个对象,并且这些对象是一个类族。RRUZ 的回答建议我从继承TPersistent和使用TJvAppXMLFileStorage,但是当我使用它的WritePersistent方法时,它会用 XML 文件中的下一个对象覆盖一个对象。

我必须稍后在数据库中保存对象(TAarms 和后代),所以我必须从文件中恢复它们。

如何在同一个文件中保留多个对象,然后从文件中加载这些对象?

0 投票
2 回答
813 浏览

forms - Delphi TForm / TPersistent 对象如何计算自己的构造和反序列化时间?

对于性能测试,我需要一种方法来测量表单从 DFM 加载其定义所需的时间。所有现有表单都继承一个自定义表单类。

为了捕捉当前时间,这个基类需要重写方法作为“扩展点”:

  1. 反序列化过程的开始
  2. 反序列化后(可以通过重写Loaded过程来实现)
  3. OnFormCreate事件执行前的那一刻

所以日志TMyForm.Create(nil)可能看起来像:

哪种 TObject(或 TComponent)方法最适合?可能在表单创建过程中还有其他的扩展点,欢迎提出建议。

背景:对于我们的一些具有非常基本结构的应用程序表单(带有一些 PageControls 和 QuantumGrids),我意识到这不是 OnFormShow 中的数据库访问和其他内容,而是花费了大部分时间(大约 2 秒)的构造,这使得我想知道这段时间都花在了哪里。作为参考对象,我还将构建一个具有类似结构但没有代码或数据模块连接的模拟表单,并测量其创建时间。

0 投票
3 回答
639 浏览

delphi - Delphi 流问题

我在 a 中使用 blob 字段kbmMemTable来存储我从中开发的自定义组件,TComponent并使用 的 read 和 write 组件流方法将组件TReader读取和写入 blob 字段。中的数据kbmMemTable最终存储在由GpStructuredStorage.

这一直完美无缺,直到我将我的组件(连同kbmMemtable)移动到一个新应用程序并尝试让新应用程序读取 blob 字段。起初我收到组件命名错误(组件名称已存在),但后来当我TReader尝试读取TPersistent组件的属性时,我开始收到访问冲突。

据我所知,关于从文件中检索kbmMemTable数据的方式以及使用. 我没有对组件进行任何更改,而且我存储在同一个表的其他 blob 字段中的其他组件似乎没有任何问题(至少在读取它们时我没有收到任何错误背部)。gpStructuredStorageTReader

我对可能是什么问题感到恼火。任何帮助/建议将不胜感激。我正在使用德尔福 2007。

0 投票
1 回答
765 浏览

delphi - 从流中读取对象时忽略未知属性

我们有一个应用程序,它通过从 TPersistent 降级将项目信息存储在一个文件中。我们使用 TSteam.ReadComponentRes 从流中读取对象。

我们希望能够打开具有未知属性的项目文件(来自较新版本或我们应用程序的其他开发分支)。目前这会导致 TReader 中出现异常,该异常是由 TStream 创建的。我们考虑过创建一个 TStream 后代,它使用 TReader 后代来处理此异常而不是停止读取。有人能想到一种更优雅的方式吗?

0 投票
2 回答
1433 浏览

delphi - 将 TObject(TPersistent) 保存/加载到 XML

大家。

我正在尝试保存我的课程:

使用以下代码归档:

但文件总是空的。

我做错了什么?

0 投票
1 回答
2283 浏览

delphi - 集合编辑器不会为 TPersistent 属性中的 TCollection 属性打开

我有我的自定义集合属性,当它是我的组件的直接成员时效果很好。

但我想将集合属性移动到组件中的 TPersistent 属性。现在问题来了,它不起作用:双击对象检查器中的集合属性通常会打开集合编辑器,但它不再起作用了。

首先-我应该将什么传递给 TPersistent 属性的构造函数?

我不能通过Self,所以我应该通过我的持久所有者吗?

我想我错过了一些东西。如果需要更多代码,请评论这篇文章。

大可视化z

0 投票
1 回答
650 浏览

delphi - 运行时设计 - 存储和加载表单布局(递归?)

我正在创建一个应用程序,其布局需要在客户端完全可配置。这意味着每个组件(控件)都可以调整大小并在表单周围移动,可以添加新控件,也可以删除一些控件。我想使用 JVCL 运行时设计(设计表面和对象检查器)。

问题在于存储加载表单。流。WriteComponent方法不支持递归写入,这意味着它只保存了“第一级”组件。

因此,例如,如果我将 TPanel 放在 Form 上,然后将 TButton 放在 Panel 上,然后在 Form 上调用 WriteComponent,则只会保存 TPanel,而不是 TButton。

我的问题是 - *如何使用WriteComponent来存储完整的控制层次结构

0 投票
1 回答
391 浏览

delphi - 集合索引策略

我有一个 TPersistent 对象的集合。我想通过它们的内存位置(作为主索引)和它们的属性(使用 rtti)来索引它们。一个集合可能有几个基于属性的索引(基于不同的属性)。

解决这个问题的策略和数据结构是什么,所以在处理基于属性的索引时,我可以从集合中删除无效对象(那些已经被销毁的对象)而不会发生访问冲突?

编辑:为了澄清事情,我希望实现这种接口(类和方法):

FMainList 包含指向 TMyItem 实例的指针列表。通过将指针转换为 NativeInt 进行排序。因此,如果我找到无效的对象,那将没有问题。但是在基于属性的索引中,我根据 TMyItems 的属性值对它们进行排序。因此,如果我试图找到无效 TMyItem 的条目(已经被销毁的条目),将引发 EAccessViolation,因为我需要获取属性值。

我目前解决这个问题的想法是将每个基于属性的索引中 TMyItem 的位置存储到存储在 FMainList 中的主记录中。但是这种方法还需要在每次添加或删除新项目时更新所有位置。这是我想要避免的。那么还有其他更好的机制吗?

0 投票
1 回答
659 浏览

delphi - TColumn.FieldName 属性编辑器

我正在分析DBGrids.pas单位。有一个TColumn类已经发布了该FieldName属性

它被声明为一个字符串,但在对象检查器中它显示为一个可编辑的组合框 ( TDataFieldProperty)

我分析了几乎所有DBGrids单元,但找不到完成该技巧的地方。我应该去哪里看?