我将应用程序的图标存储在几个图像列表中。
有一个:
X16
X24
X48
X32
将 ICO 放置在 TButton 或 TImage 中的 TAction 和直接访问都来自这几个图像列表。
我的问题是,当我需要删除一个时,它的噩梦
我想为每个人设置一个 CONST 值,但由于 TActions 中使用了一些值,所以它不是一个完整的解决方案。
你们是怎么做的?你们有什么解决方案来解决或至少改善这个问题?我用的是德尔福 2007。
我将应用程序的图标存储在几个图像列表中。
有一个:
X16
X24
X48
X32
将 ICO 放置在 TButton 或 TImage 中的 TAction 和直接访问都来自这几个图像列表。
我的问题是,当我需要删除一个时,它的噩梦
我想为每个人设置一个 CONST 值,但由于 TActions 中使用了一些值,所以它不是一个完整的解决方案。
你们是怎么做的?你们有什么解决方案来解决或至少改善这个问题?我用的是德尔福 2007。
我所做的是在运行时通过从资源加载来添加所有图标。当我添加它们时,我将添加图标的索引保存到全局变量中。我还在运行时通过引用这些全局变量来分配每个操作的 ImageIndex 属性。
这允许灵活地在项目中添加和删除图标,而不会出现编号问题。该方法适合基于字体缩放的运行时图标大小决策。缺点是您在设计时看不到图像,这是一个缺点。如果您想拥有上面概述的所有灵活性,我看不到更好的解决方案。在理想情况下,图像将通过名称或 ID 而不是数组中的连续索引来标识。但要实现这一点,您需要在 VCL 之上实现大量代码。
这个问题有几种解决方案。
如果您想使用常量,但不想在每次删除图像时都更改它们。您可以执行以下操作:
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);