Delphi FireMonkey如何在应用程序内存储数据

8
我需要在Delphi XE5 FireMonkey(Android)移动应用程序中存储一些自定义的静态数据。我在网上看到了一个“RC_DATA”解决方案,但它只适用于Windows。我需要一个跨平台的解决方案。
这是我发现的RC_DATA解决方案:http://delphidabbler.com/articles?article=2 代码示例中的注释是:// 资源类型 - RT_RCDATA(来自Windows单元)
我从这个注释中得出结论,Windows单元内的代码是Windows特定的。如果我理解有误,请原谅。
由于Chris说它实际上是跨平台的,我将尝试它。谢谢Chris。
关于寻求组件或库的问题,我已经读过并反复阅读了我的问题,但我没有看到它。我想一个“解决方案”可能包括一个组件或库,但这从未在我的脑海中。再次,如果我做错了什么,请原谅。

8
天啊,为什么要将这个问题搁置?我正在撰写一篇答案,解释OP所指的“RC_DATA”解决方案实际上并非Windows专用,而实际上是Delphi提供的最具“跨平台”的解决方案。很明显,这个问题并没有要求人们“推荐或查找工具、库或喜爱的离线资源”,我很惊讶其中五名关闭者中唯一的Delphi开发人员认为它是。 - Chris Rolliston
1
@ChrisRolliston 刚刚重新打开了这个问题... - user57508
@AndreasNiedermair - 干杯 - Chris Rolliston
1
这是我发现的RC_DATA解决方案:http://delphidabbler.com/articles?article=2代码示例中的注释://资源类型-RT_RCDATA(来自Windows单元)我得出的结论是,Windows单元内部的代码是针对Windows特定的。如果不是这种情况,请谅解。由于Chris说它实际上是跨平台的,所以我会尝试一下。谢谢Chris。关于请求组件或库,我已经反复阅读了我的问题,但我并没有看到它。我想‘解决方案’可能暗示了这一点,但这从未在我心中。再次道歉。再见 - user3224814
关于请求组件或库:但是你没有这样做,也许那些投票将你的问题搁置的人只是有点过于急躁了。不幸的是,这种情况经常发生... - MartynA
1个回答

10

"RC_DATA"解决方案并非只适用于Windows系统,实际上它是Delphi提供的最简单的跨平台方式。你需要做的是通过Project|Resources and Images...将文件添加到项目中;由于其他资源类型 Windows-specific,所以每个资源都应该使用RCDATA。然后,像在VCL应用程序中一样使用TResourceStream进行加载(RT_RCDATASystem.Types中声明):

procedure LoadStringsFromRes(Strings: TStrings; const ResName: string);
var
  Stream: TResourceStream;
begin
  Stream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    Strings.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

另外,如果由于某种原因您想在尝试加载资源之前检查给定资源是否存在,则 System 单元为非 Windows 平台实现了 Windows API 的 FindResource 函数。

嵌入式资源的替代方法是使用 Project|Deployment 将文件添加到应用程序捆绑包(OS X 和 iOS)或 APK(Android)。虽然这可能被认为是执行任务的更“本地化”的方法,但适当的“远程路径”是特定于平台的…而且说实话,如果一个人沉迷于本地平台,无法处理嵌入式资源,那么他们首先就不会使用 FMX...


更新:关于现在链接过来的文章,它展示了如何手动编写 RES 文件,这不是一个人通常会做的事情——如果您没有使用 IDE 的资源管理器,那么正常的方式是创建 RC 脚本并使用 Borland 或 Microsoft 的资源编译器进行编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接