2011-12-21 42 views
-1

我將我的應用程序的圖標存儲在多個圖像列表中。圖片列表使用

有一個:

X16

X24

X48

X32

兩個TActions以及直接訪問將感染控制主任在一個TButton,或TImage中的這幾款來到圖像列表。

我的問題是,當我需要刪除一個噩夢其

我認爲一個常量的值設置爲所有人的,但有些是在TActions使用它不是一個完整的解決方案。

你們是怎麼做到這一點的,你們有什麼解決方案可以解決或者至少可以改善這一點? 我使用DELPHI 2007.

+3

我使用常量來存儲下面的David的答案等索引,但在你的情況下,如果我想刪除一個圖像,我想我會在那裏加載一個「空白」圖像,並在下次使用它。 – 2011-12-21 15:38:58

+0

@marcus我使用變量而不是常量,所以我具有這種靈活性。這也意味着我可以在不同項目之間共享代碼,並且不會受到所有項目中相同編號的約束。 – 2011-12-21 15:41:39

+1

我不知道這個問題在問什麼。 Jlouro,請你澄清一下嗎?或者@David可以,因爲他至少能夠很好地理解它的答案。 – 2011-12-21 15:45:12

回答

4

我所做的是在運行時通過從資源加載來添加所有圖標。當我添加它們時,我將添加的圖標的索引保存到全局變量中。我還通過引用這些全局變量在運行時分配每個操作的ImageIndex屬性。

這允許靈活地添加和刪除項目的圖標,而沒有編號問題。該方法迎合了基於字體縮放的運行時圖標大小決策。缺點是你在設計時不能看到圖像,這是一個缺點。如果你想擁有上述所有的靈活性,我沒有看到更好的解決方案。在理想的世界中,圖像將通過名稱或ID來標識,而不是數組中的連續索引。但爲了達到這個目的,你需要在VCL之上實現很多代碼。

+0

從.res文件而不是來自文件夾的資源來說,你的意思是? – Jlouro 2011-12-21 16:19:14

+0

是的,我使用鏈接到可執行文件的.res文件。作爲替代,您可以從文件夾加載。 – 2011-12-21 16:22:31

+0

+1。 .NET中的WinForms ImageList允許每個圖像的字符串名稱。然後,您可以執行il.Images.IndexOfKey(「myicon」)來獲取索引,或者直接在目標組件cmp.SelectedImageKey =「myicon」上獲取。如果Delphi ImageList擴展了這個功能,這將有所幫助。 – 2012-04-05 07:38:00

3

這個問題有幾種解決方案。

如果您想使用常量,但不希望每次刪除圖像時都更改它們。你可以做到以下幾點:

const 
    idImgA = 0; 
    idImgB = idImgA + 1; 
    idImgC = idImgB + 1; 
    idImgD = idImgC + 1; 
    idImgE = idImgD + 1; 
    idImgF = idImgE + 1; 
    idImgG = idImgF + 1; 

當你想刪除的圖像d,你只需要改變兩行:

const 
    idImgA = 0; 
    idImgB = idImgA + 1; 
    idImgC = idImgB + 1; 
    idImgE = idImgC + 1; 
    idImgF = idImgE + 1; 
    idImgG = idImgF + 1; 

另一種方法是用枚舉類型的工作:

type 
    TImgEnum = (imgA, imgB, imgC, imgD, imgE, imgG); 

您可以使用Ord操作符獲取圖像索引:

index := Ord(Enum);