我已经开发了用于绘制一些形状(主要是线条)的应用程序,现在我需要能够将草图存储到文件中,我知道 delphi 已经内置了用于对象持久性的例程,但我从未使用过它。
有人可以告诉我,如果我必须持久化还引用其他对象(将被存储到)的对象,我可以使用对象持久性,我有可以连接到其他 TLine 对象等的 TLine 对象。
使用此功能或编写自定义过程来将对象存储/读取到/从文件中更好吗?
我已经开发了用于绘制一些形状(主要是线条)的应用程序,现在我需要能够将草图存储到文件中,我知道 delphi 已经内置了用于对象持久性的例程,但我从未使用过它。
有人可以告诉我,如果我必须持久化还引用其他对象(将被存储到)的对象,我可以使用对象持久性,我有可以连接到其他 TLine 对象等的 TLine 对象。
使用此功能或编写自定义过程来将对象存储/读取到/从文件中更好吗?
内置对象持久性主要设计用于将组件流式传输到 dfm,您需要做的持久化草图的工作不会从该机制中受益匪浅。
我认为您最好提出一个自定义方案。
我过去使用的一种方法是将我的对象属性存储在一个 XML 文件中,编写一个自定义“保存”例程,该例程添加到传递的 IXMLNode,以及一个从传递的 IXMLNode 读取的新构造函数。我将组件存储为节点,将属性存储为属性(除非属性是另一个对象,否则它将是子节点)。
我相信 Delphi Jedi 项目中有一些例程可以为您处理组件流,但我没有直接使用它们,因为我的大部分 XML 流是手工完成的,因为我的对象非常简单并且可以只用一个少数属性。
我使用 TI 对象持久性框架 (tiopf.com)。我在http://tiopf.sourceforge.net/Doc/overview/index.shtml上写了概述。
它可以让您将对象和列表保存到 xml、csv、数据库等。它会自动处理子对象。
如果您有兴趣,请使用 svn 版本,而不是 sourceforge 下载,因为它具有更多功能(包括部分 D 2009 支持)。
你也可以使用 java 中著名的 hibernate。
您可以在这里找到的 delphi 端口: dHibernate
JSON是一种新的、非常紧凑的对象存储方式。Delphi 有两个库:SuperObject和lkJSON。
使用来自http://www.simdesign.nl/xml.html的NativeXML,我完成了从 XML 代码读取/写入 delphi 内存对象的工作。非常好,非常简单,这里包含演示:http ://www.simdesign.nl/forum/download/file.php?id=236