我將我的應用程序的圖標存儲在多個圖像列表中。圖片列表使用
有一個:
X16
X24
X48
X32
兩個TActions以及直接訪問將感染控制主任在一個TButton,或TImage中的這幾款來到圖像列表。
我的問題是,當我需要刪除一個噩夢其
我認爲一個常量的值設置爲所有人的,但有些是在TActions使用它不是一個完整的解決方案。
你們是怎麼做到這一點的,你們有什麼解決方案可以解決或者至少可以改善這一點? 我使用DELPHI 2007.
我將我的應用程序的圖標存儲在多個圖像列表中。圖片列表使用
有一個:
X16
X24
X48
X32
兩個TActions以及直接訪問將感染控制主任在一個TButton,或TImage中的這幾款來到圖像列表。
我的問題是,當我需要刪除一個噩夢其
我認爲一個常量的值設置爲所有人的,但有些是在TActions使用它不是一個完整的解決方案。
你們是怎麼做到這一點的,你們有什麼解決方案可以解決或者至少可以改善這一點? 我使用DELPHI 2007.
我所做的是在運行時通過從資源加載來添加所有圖標。當我添加它們時,我將添加的圖標的索引保存到全局變量中。我還通過引用這些全局變量在運行時分配每個操作的ImageIndex屬性。
這允許靈活地添加和刪除項目的圖標,而沒有編號問題。該方法迎合了基於字體縮放的運行時圖標大小決策。缺點是你在設計時不能看到圖像,這是一個缺點。如果你想擁有上述所有的靈活性,我沒有看到更好的解決方案。在理想的世界中,圖像將通過名稱或ID來標識,而不是數組中的連續索引。但爲了達到這個目的,你需要在VCL之上實現很多代碼。
從.res文件而不是來自文件夾的資源來說,你的意思是? – Jlouro 2011-12-21 16:19:14
是的,我使用鏈接到可執行文件的.res文件。作爲替代,您可以從文件夾加載。 – 2011-12-21 16:22:31
+1。 .NET中的WinForms ImageList允許每個圖像的字符串名稱。然後,您可以執行il.Images.IndexOfKey(「myicon」)來獲取索引,或者直接在目標組件cmp.SelectedImageKey =「myicon」上獲取。如果Delphi ImageList擴展了這個功能,這將有所幫助。 – 2012-04-05 07:38:00
這個問題有幾種解決方案。
如果您想使用常量,但不希望每次刪除圖像時都更改它們。你可以做到以下幾點:
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);
我使用常量來存儲下面的David的答案等索引,但在你的情況下,如果我想刪除一個圖像,我想我會在那裏加載一個「空白」圖像,並在下次使用它。 – 2011-12-21 15:38:58
@marcus我使用變量而不是常量,所以我具有這種靈活性。這也意味着我可以在不同項目之間共享代碼,並且不會受到所有項目中相同編號的約束。 – 2011-12-21 15:41:39
我不知道這個問題在問什麼。 Jlouro,請你澄清一下嗎?或者@David可以,因爲他至少能夠很好地理解它的答案。 – 2011-12-21 15:45:12