2010-06-16 41 views
3

我試圖從res文件加載圖標到圖像列表中。 我用Delphi ImageEditor創建了res文件。德爾福的圖像列表:從.res中加載ResourceLoad圖標

而這樣一來,我試圖加載圖標:

//if ImageList1.ResourceLoad(rtIcon, 'TEXT_BOLD', clWhite) then 
    if imagelist1.GetResource(rtIcon, 'TEXT_BOLD', 0, [lrDefaultColor], clRed) then 
    showmessage('loaded') 
    else 
    showmessage('not loaded'); 

兩種方式都不起作用。有任何想法嗎?謝謝!

+0

https://jonlennartaasenden.wordpress.com/2014/10/28/populate-imagelist-at-runtime/ – Ampere 2016-09-16 13:22:38

回答

4

ResourceLoadGetResource方法從單個指定圖像資源加載整個圖像列表。意圖是你將有一個位圖保存所有圖像意味着在列表中。該控件然後根據圖像列表的配置寬度和高度將其分片爲單獨的圖塊。

考慮到這一點,您可能期望圖像列表只是簡單地加載圖標,並且只剩下列表中的單個圖像。但圖像列表只允許加載位圖資源。他們不會加載圖標資源。 (資源類型參數可以爲將來擴展其功能提供可能性。)有關詳細信息,請參閱ImageList_LoadImage API函數。

它看起來像你不想加載整個圖像列表無論如何。看起來您希望將圖標附加到已經在列表中的圖像列表中。在這種情況下,你的方法調用​​是好的。 TIcon知道如何加載從資源本身的東西,所以你的代碼可以多一點精簡:

myicon := TIcon.Create; 
try 
    myicon.LoadFromResourceName(HInstance, 'TEXT_BOLD'); 
    FImageList.AddIcon(myicon); 
finally 
    myicon.Free; 
end; 
1

我直接使用windows功能解決了它:

... 
var 
    myicon : Ticon; 
    Hd: THandle; 
begin 

    Hd := LoadImage(HInstance, 'TEXT_BOLD', IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR); 
    myicon := TIcon.Create; 
    myicon.ReleaseHandle; 
    myicon.Handle := Hd; 
    FImageList.AddIcon(myicon); 

end; 
... 
+0

羅布的回答是一個更好的方法。您的代碼根本沒有進行任何錯誤檢查,並且沒有釋放您創建的圖標。 – 2010-06-17 16:29:35