我需要在我的Delphi XE5 FireMonkey(
Android)移动应用程序中存储一些自定义的静态数据.我在网上看过’RC_DATA’解决方案,但它是特定于Windows的.
我需要一个跨平台的解决方案.
我需要一个跨平台的解决方案.
这是我发现的RC_DATA解决方案:http://delphidabbler.com/articles?article=2
代码示例中的注释读取://资源类型 – RT_RCDATA(来自Windows单元)
我从这篇评论中得出结论,Windows单元中的代码是特定于Windows的.如果不是这样,我道歉.
既然Chris说它实际上是跨平台的,我会尝试一下.谢谢克里斯.
关于要求组件或库,我已阅读并重新阅读我的问题,我只是没有看到它.我猜一个’解决方案’可能会包含一个组件或库,但这在我看来并不存在.如果我做错了,我再次道歉.
解决方法
远非你所谓的“RC_DATA”解决方案是特定于Windows的,它实际上是Delphi提供的最直接的跨平台方式.您需要做的是通过Project | Resources and Images …将文件添加到项目中;由于其他资源类型是特定于Windows的,因此只需坚持使用RCDATA即可.然后,要加载,请使用TResourceStream,就像您在VCL应用程序中所做的那样(RT_RCDATA在System.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;
此外,如果由于某种原因您想在尝试加载之前检查给定资源是否存在,则系统单元会为非Windows平台实现Windows API FindResource函数.
嵌入式资源的替代方法是使用Project | Deployment将文件添加到应用程序包(OS X和iOS)或APK(Android).虽然这可能被认为是一种更“平台原生”的做事方式,但适当的“远程路径”是特定于平台的……坦率地说,如果一个人如此痴迷于平台原生,他们就无法处理嵌入式资源,那么他们首先不会使用FMX ……
更新:关于现在已经链接的文章,它显示了如何手动写出一个RES文件,这不是一个人通常会做的 – 如果你没有使用IDE的小资源管理器,那么通常的方法是创建一个RC脚本并使用Borland或Microsoft资源编译器进行编译.