FMX项目EXE可执行程序资源图片如何部署?
VCL程序可以把图片作为资源编译链接进EXE可执行程序,
FMX项目中,我用如下代码引用图片资源:
System::Ioutils::TPath::GetDocumentsPath()+PathDelim+"aa.jpg",
安卓平台配置把图片资源部署在assets\internal\目录下,生成的apk会自动打包图片资源,
但是Windows平台,同样的代码,只能把图片都拷贝到系统的文档文件夹程序才能调用,
图片和EXE程序是分离的,那如何把可执行程序分享给别人比较方便?

解决方案 »

  1.   

    如果你的图片不需要修改,和程序放在一起即可,或者程序下的子目录,用TPath::GetLibraryPath获得程序安装的主目录
      

  2.   

    那安卓平台和windows平台获取图片的代码就不一样了?
      

  3.   


    安卓平台,Project——Deployment,添加文件,Remote Path应该设为多少呢?
      

  4.   

    直接写相对路径就可以了,参考:http://docwiki.embarcadero.com/RADStudio/XE5/en/Deployment_Manager
      

  5.   


    安卓外部资源文件一般都是部署在assets\internal\目录(Remote Path),代码用:
    System::Ioutils::TPath::GetDocumentsPath()+PathDelim+"aa.jpg"如果你说的用TPath::GetLibraryPath,那么部署的时候Remote Path怎么设置?
      

  6.   

    随便加个目录,比如pic\,你的应用带的图片文件的Remote Path都设置到这里
      

  7.   


    我看Delphi XE6 Android 编程入门教程.pdf 里写:
    GetDocumentsPath:  /data/data/com.embarcadero.Project1/files
    GetLibraryPath:  /data/app-lib/com.embarcadero.Project1-2
    这个和assets\internal\目录(Remote Path)的子目录好像对应不起来。
      

  8.   


    我看Delphi XE6 Android 编程入门教程.pdf 里写:
    GetDocumentsPath:  /data/data/com.embarcadero.Project1/files
    GetLibraryPath:  /data/app-lib/com.embarcadero.Project1-2
    前者对应assets\internal\目录(Remote Path),后者好像对应不起来?
      

  9.   

    GetLibraryPath取的就是应用安装的那个目录
      

  10.   


    如果部署的资源文件要能够用GetLibraryPath取得路径,Project——Deployment,添加文件,Remote Path应该设为多少呢?
      

  11.   


    就是 ./res 类似这样?
      

  12.   

    我用代码:
    bmp->LoadFromFile(System::Ioutils::TPath::GetLibraryPath()+PathDelim+u"资源"+PathDelim+"0.bmp");
    Windows平台很方便,资源在相对EXE同目录下就可以。
    安卓平台,同样的代码,Project——Deployment,添加文件,Remote Path设为 "资源",运行出错,如图:看来还是用条件编译算了。
      

  13.   

    我试了一下,安卓下,GetLibraryPath得到的确实是应用安装目录/lib/arm,还没找到在多平台下直接取得安装目录的方法
      

  14.   

    如果是Windows版本,还可以通过“资源与图片(Project菜单)”,示例代码:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TResourceStream *rs;
    rs=new TResourceStream((UINT)HInstance,"jpgimg1",RT_RCDATA);
    Image1->Bitmap->LoadFromStream(rs);
        delete rs;
    }