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