我将应用程序的图标存储在多个图像列表中。
有一个:
X16
X24
X48
X32
TButton或TImage中的TA和直接访问ICO都来自这几个图像列表。
我的问题是当我需要删除一个噩梦时
我想到为每个人设置一个CONST值,但由于某些用于TActions,它不是一个完整的解决方案。
你们是如何做到这一点的?你们需要解决哪些解决方案或至少改善这一点? 我使用DELPHI 2007。
答案 0 :(得分:4)
我所做的是在运行时通过从资源加载来添加所有图标。当我添加它们时,我将添加的图标的索引保存到全局变量。我还通过引用这些全局变量在运行时分配每个操作的ImageIndex属性。
这样可以灵活地在项目中添加和删除图标,而不会出现编号问题。该方法基于字体缩放来满足运行时图标大小决策。缺点是您无法在设计时看到图像,这是一个缺点。如果您想拥有上述所有灵活性,我看不到更好的解决方案。在理想的世界中,图像将通过名称或ID来识别,而不是通过阵列的连续索引来识别。但要实现这一点,您需要在VCL之上实现大量代码。
答案 1 :(得分: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);