每次我将文本添加到列表框或列表视图或编辑器中的按钮时,它都会在每次启动程序时显示。问题是为什么当我在运行时添加它们然后重新启动程序时,这个项目会消失(文本或按钮)。我知道文本可以保存在文件中,但是还有其他任何方式,比如编辑器保存的默认值。
答案 0 :(得分:1)
是的,我这么多年来一直这样做。从TForm下降并覆盖create和destroy。在dtor中,使用Tstream.WriteComponent()流出整个表单(并调用inherited!)。使用表单类名或某种派生词来汇编文件名。
在create中,再次汇编文件名并检查表单是否存在流文件。如果没有,只需调用继承的create(),以便“正常”创建表单。如果文件确实存在,请调用CreateNew(),然后使用Tstream.ReadComponent在表单中流式传输。
这将有效地保存和恢复所有已发布的属性。表单及其所有组件的大小,位置颜色,字体,文本,标题等变得持久。应用程序启动时的状态与关闭时完全相同。标签,列表,备忘录文本,图像等都可以跨会话自动保留,无需编写任何额外的代码。
如果你将新的'TpersistentForm'类放在一个单元中,你可以通过将'persist'单元添加到表单元的uses子句中来轻松地使现有应用'持久',从'TForm'编辑表单类到'TpersistentForm'并重建 - 通过添加一个单元并更改一个类来实现'即时'持久应用程序。
我在几乎所有的Delphi应用程序上使用它。当应用程序以与上次关闭时相同的位置,字体等启动时,它会给用户留下深刻的印象。此外,我不需要任何代码来存储配置数据 - TEdits等中的文件路径等只是弹出正确的备份 - 我不需要任何讨厌和复杂的INI文件或注册表!
有一些缺点,如果你试试,你会发现。一个是设计/开发时间 - 你测试你的半打造的应用程序,它工作正常,所以你添加一些额外的按钮,标签来做新的东西,并重新运行应用程序 - 新组件不存在!发生这种情况是因为从上一次运行中保存的流文件不包含新组件的属性:((
答案 1 :(得分:0)
在设计时添加文本时,它会保存在.dfm文件中并编译到程序中。这不会在运行时发生。
想象一下,如果确实如此。它实际上无法以相同的方式运行,因为在部署应用程序后,您无法更改可执行文件。您不希望将用户设置存储在可执行文件中。因此,这些设置确实需要在应用程序外部。
要实现这一点,您需要实现自己的持久性机制。您需要将运行时添加的内容保存到某个位置的文件中(例如,在用户配置文件下),然后在应用程序启动时重新加载它。