我已经有两种不同的方式在所有应用程序之间共享图像,但我不知道哪个更好:
想法1:
创建一个资源唯一的DLL项目,其中包含一个包含所有图像的.res文件的资源链接引用。每个应用程序将反过来加载dll,并根据需要将其所需的图像读入TImageList或TImage。
优点:允许将存储库中的图像保留为原始格式。
缺点:我将无法在设计时看到图像,因为它们只能在运行时加载。我还必须创建与图像相同数量的常量,或者使用与图像相同数量的值的集合,以便可以独立于资源文件的名称引用每个图像。
想法2:
创建一个数据模块,该模块被编译为bpl并作为所有应用程序的运行时包装。我会将图像添加到几个TImageList(取决于图像大小)或TPngImageList(允许单个组件上的多种尺寸的图像)。
优点:我可以将此数据模块添加到我需要的所有应用程序中,并在设计时查看我可能需要使用的所有图像。
缺点:所有的图像将被加载到内存中,即使我只需要使用它们。当将图像添加/修改到TImageList / TPngImageList中时,我需要确保图像的顺序从不改变。所有图像将存储在单个.dfm中。
想法3 :(新)
看完其他应用程序谁也需要在编译的exe之间共享图像,我有另一个想法。
将所有共享图像作为普通png / ico文件保存在编译文件所在的子文件夹(例如数据)上。
优点:无需加载内存中的所有图像,我只需要获得所需的图像。如果图像的总数相当大(使用该方法的一个应用程序在数据子文件夹上具有1400个图像),这可能是特别重要的。
缺点:图像将可见/可供任何人使用。可能会在用户机器上占用更多的磁盘空间。
我想就这两个想法或任何其他关于如何更好地实现这一点的建议提出意见。
谢谢!
解决方法
在我的软件中,我有一个全局的图像列表,它在运行时通过从资源加载来填充,当然也可以在运行时分配图像索引。这带来的另一个好处是能够选择适合于字体缩放的图像大小。否则,您需要为16px图标,20px图标,24px图标,32px图标等提供单独的图像列表。