我正在从事一个由几个编译的Delphi应用程序(超过20个exe和dll)组成的项目,我需要共享60+映像(16x16、24x24、32x32、.)他们之间的关系。
我考虑了两种在所有应用程序之间共享图像的不同方法,但我不确定哪一种更好:
Idea 1:
创建一个纯资源的DLL项目,该项目包含对包含所有映像的.res文件的资源链接引用。每个应用程序将依次加载dll并根据需要将它可能需要的图像读取到TImageList或TImage中。
优点:允许将图像保存在存储库中,其格式为本机格式。
缺点:我无法在设计时看到图像,因为它们只能在运行时加载。我还必须创建与图像相同的常量,或者使用与图像相同的值集,以便独立于资源文件中的名称引用每个图像。
Idea 2:
创建一个数据模块,该模块作为bpl编译,并包含在所有应用程序上的运行时包。我会将图像添加到几个TImageList中(取决于图像大小),或者添加到TPngImageList中(它允许在单个组件上显示多个大小的图像)。
优点:我将能够将这个数据模块添加到我需要的所有应用程序中,并在设计时看到我可能需要使用的所有图像。
缺点:所有的图像都会被加载到内存中,即使我只需要使用一个。在向TImageList/TPngImageList添加/修改图像时,我需要确保图像的顺序从未改变。所有图像将存储在一个.dfm中。
Idea 3: (新)
在查看了其他也需要在编译后的exe之间共享图像的应用程序之后,我又有了另一个想法。将所有共享图像保存为编译文件所在的子文件夹中的普通png/ico文件(例如数据)。
优点:不需要在内存中加载所有的图像,我只需要得到所需的图像。如果图像的总数相当大,这可能特别重要(使用此方法的一个应用程序在数据子文件夹上有1400幅图像)。
缺点:任何人都可以看到/可以看到图像。可能会占用用户机器上更多的磁盘空间。
我希望就这两种想法发表意见,或就如何更好地实现这一目标提出任何其他建议。
谢谢!
发布于 2011-08-29 15:48:09
我对选项1有很强的偏好,这样做可以让您将图像保留在修订控制存储库中的原生格式中。使用选项2,您可以将图像存储在.dfm文件中,我发现这非常令人不满意。缺点是,您将失去对图像的设计时间。我个人更喜欢做这种交易。
在我的软件中,我有一个全局映像列表,我通过从资源加载在运行时填充它,当然也在运行时分配图像索引。这带来的另一个好处是能够选择适合字体缩放的图像大小。否则,您需要有单独的图像列表16 to图标,20 to图标,24 to图标,32 to图标等。
发布于 2011-08-29 16:28:12
另一个选项是编写自己的TImage组件,并调用额外的属性。
property dllname: string read fdllname write set_dllname;
property resname: string read fresname write set_resname;在setter过程中,然后从资源加载图像。
这样,您仍然可以在设计时看到图像。
确保覆盖在dfm文件中保存映像的机制,这样您的exe就不会因dll中已经存在的图像而膨胀。
不是100%确定如何去做,但如果你想走这条路,我肯定有人会很容易地回答这个问题。
https://stackoverflow.com/questions/7232406
复制相似问题