Delphi FireMonkey 存储来自组件的信息

Posted

技术标签:

【中文标题】Delphi FireMonkey 存储来自组件的信息【英文标题】:Delphi FireMonkey store information from Components 【发布时间】:2016-01-24 20:24:49 【问题描述】:

我希望我的 Delphi FireMonkey 应用程序将来自 Edit.Text 组件的所有信息存储在应用程序可以从另一次启动应用程序时重新加载这些数据的任何位置。 (这不是必需的或不需要的,但我也想保存一些 Memo.Text 和 Combobox.ItemIndex [也许还有一些其他] 数据。)

我能想到的唯一方法是编写一个程序,将所有信息存储到 TMemo 中并将其保存到文件中。 (以及重新分配这些东西的另一个程序)如果只有一些信息,我会这样做,但我有太多数据要记住,所以这样做太难了。

我的问题是如何让我的应用程序轻松记住所有这些数据/值。 (类似于function SaveAllComponentsValues;) 我的应用程序将在 Mac、Windows、iosandroid 上运行,因此该解决方案必须适用于所有这些平台。

我想可以存储[特定/所有]组件的所有属性。这对我也很有帮助。

【问题讨论】:

你读过documentation Firemonkey Save State吗? 文档说“这种状态的保存只是“暂时的”;如果您手动关闭应用程序或从任务管理器中关闭应用程序然后重新启动,则之前的“暂时”状态将丢失。 “我想为应用程序暂停/进入后台或设备重新启动等情况存储信息。所以这不是我想要我的应用程序给我们的,但它接近想要的解决方案。谢谢 好吧,您应该阅读完整文档页面。它描述了 both 变体...请参阅文档页面上的 2.2 存储位置和名称 是的,这非常有效,这正是我正在等待的解决方案。 【参考方案1】:

如果您确定不应该使用数据库,那么您可以使用 inifile 来保存值并遍历表单上的组件。对移动设备一无所知,因此不确定,但这里有 2 个程序可以保存和恢复表单上的所有 Tedit 组件:

uses system.ioutils;
..


procedure TForm2.savebuttonClick(Sender: TObject);

var i:integer;
    acomponent:tcomponent;
    inifile:tinifile;

begin
  inifile:=tinifile.Create(tpath.GetHomePath+tpath.DirectorySeparatorChar+'myinifile.ini');
  for i:=0 to form2.ComponentCount-1 do
  begin
    acomponent:=form2.Components[i];
    if acomponent.ClassType=tedit then inifile.WriteString('Edits',acomponent.Name,(acomponent as tedit).Text)
  end;
  inifile.free
end;

procedure TForm2.restorebuttonClick(Sender: TObject);

var i:integer;
    acomponent:tcomponent;
    inifile:tinifile;

begin
  inifile:=tinifile.Create(tpath.GetHomePath+tpath.DirectorySeparatorChar+'myinifile.ini');
  for i:=0 to form2.ComponentCount-1 do
  begin
    acomponent:=form2.Components[i];
    if acomponent.ClassType=tedit then
    begin
      (acomponent as tedit).Text:=inifile.readString('Edits',acomponent.Name,'')
    end;
  end;
  inifile.free
end;

【讨论】:

这看起来像是我一直在等待的代码。此外,我可以对其进行一些修改,以便它也可以保存其他组件的值。非常感谢。我没有说我不想使用数据库;数据的保存方式无关紧要,但是您发布的这段代码对我来说似乎是最好的方式。

以上是关于Delphi FireMonkey 存储来自组件的信息的主要内容,如果未能解决你的问题,请参考以下文章

Delphi XE2 Firemonkey 的 Align 属性设置为 alScale 对坐标系有何影响?

如何在Delphi FireMonkey中发送iOS的推送通知

如何从 Firemonkey/Delphi 中的条码扫描仪获取数据

Delphi 11中的Firemonkey Listview和移动屏幕方向

Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完整实例

创建一个火猴组件