我正在研究一個由多個編譯後的Delphi應用程序(超過20個exe和dll)組成的項目,我將需要共享60多個圖像(16x16,24x24,32x32 ,...)之間。在多個應用程序之間共享圖像的最佳方式
我雖然已經將所有的應用程序之間共享圖像兩種不同的方式,但我不知道哪個好:
理念1:
創建資源 - 只有DLL項目,其中包含一個資源鏈接引用的.res文件,其中包含我的所有圖像。每個應用程序將依次加載dll並根據需要將它可能需要的必要圖像讀入TImageList或TImage。
優點:允許以原始格式保存存儲庫中的圖像。
缺點:我將無法在設計時看到圖像,因爲它們只會在運行時加載。我還必須創建與圖像相同數量的常量,或者使用與圖像數量相同的集合,以便可以在資源文件上獨立於它的名稱引用每個圖像。
理念2:
創建其被編譯爲BPL和包括作爲上的所有應用程序運行時封裝的數據模塊。我會將這些圖像添加到幾個TImageList(取決於圖像大小)或TPngImageList(它允許在單個組件上有幾種尺寸的圖像)。
優點:我可以將此數據模塊添加到所需的所有應用程序,並在設計時查看可能需要使用的所有圖像。
缺點:所有的圖像將被加載到內存中,即使我只需要使用一個。我需要確保在向TImageList/TPngImageList中添加/修改圖像時,圖像的順序始終不會改變。所有圖像都將存儲在一個.dfm文件中。
理念3:(新)
看着誰也需要編譯的exe之間共享圖像的其它應用程序後,我有另一種想法。 將所有共享圖像保存爲編譯文件所在的子文件夾(例如Data)上的普通png/ico文件。
優點:無需在內存中加載所有圖像,我可以得到所需的圖像。如果圖像的總數量相當大(使用此方法的一個應用程序在數據子文件夾上有1400個圖像),這可能特別重要。
缺點:任何人都可以看到/可以看到圖像。可能會在用戶機器上佔用更多的磁盤空間。
我想問一下關於這兩種觀點或如何更好地做到這一點任何其他建議意見。
謝謝!
關於理念2:你可以釋放你不會需要在運行時的圖片? – Jeff
我不認爲我可以在運行時輕鬆釋放我不需要的圖像,主要是因爲如果我從TImageList中刪除不需要的圖像,那麼它將不會將正確的圖像索引分配給任何控件誰使用TImageList。 – smartins