2010-10-28 85 views
0

我在我的應用程序中使用了一組約100個圖標,這些都是使用固定參考號進行訪問的,這些數字也可供用戶選擇圖標。所需的三種分辨率是16x16,32x32和48x48。這些解決方案中的每一個都保存在TPngImageList中,並且使用TDataModule創建了一個「圖標庫」,而不是包含這三個圖像列表(TArtImageLibraryImageLists)。當需要任何圖像列表時,一個簡單的「首次使用時創建」方法會實例化此TDataModule。任何需要訪問圖像列表的控件的LargeImages或somesuch屬性都可以通過調用所需的分辨率函數來設置。如何提高德爾福TPngImageList(或TImageList)的加載時間

問題是程序啓動時的加載時間,在快速機器上約爲1秒。顯然,最糟糕的罪魁禍首是48x48圖像列表,但我想知道是否有更好的加載機制(例如使用資源文件?),這會加快速度。或者有什麼方法可以重新格式化圖像列表?我仍然需要在運行時TImageList,例如我的TreeView等。

謝謝, 布賴恩。

var 
    FInstance : TArtImageLibraryImageLists; 

function ArtImageLibraryImageLists : TArtImageLibraryImageLists; 
begin 
    If not Assigned(FInstance) then 
    FInstance := TArtImageLibraryImageLists.Create(nil); 
    Result := FInstance; 
end; 


function ArtIconLibraryImageList16 : TImageList; 
begin 
    Result := ArtImageLibraryImageLists.ImageList16; 
end; 

function ArtIconLibraryImageList32 : TImageList; 
begin 
    Result := ArtImageLibraryImageLists.ImageList32; 
end; 

function ArtIconLibraryImageList48 : TImageList; 
begin 
    Result := ArtImageLibraryImageLists.ImageList48Shadow; 
end; 
+0

您似乎在啓動時需要數據模塊,但啓動時是否需要48x48映像? – 2010-10-28 09:56:25

回答

0
  1. 你說「一個簡單的‘創建在第一次使用’方法實例化這個TDataModule」,但隨後說,問題是啓動時間。當datamodule實際創建時?
  2. 你是否描述該應用程序以確保圖像列表正在加載該問題?
  3. 如果問題實際上是圖像列表,你需要PNG嗎?如果它們按照這種方式存儲,則需要將它們解碼並添加到圖像列表位圖中。 ImageList_LoadImage()可以在一個步驟中加載位圖。
+0

1是的,它是在第一次分配圖像列表引用時創建的。 2 - 是的。它是包含我的3個圖像列表的數據模塊的DFM資源的加載緩慢。 3. PNG的 - 我用透明度,但這是一個很好的觀點,也許我會看看其他格式。謝謝。 – 2010-10-28 16:48:06