图像列表用法

时间:2011-12-21 15:09:43

标签: delphi delphi-2007 imagelist

我将应用程序的图标存储在多个图像列表中。

有一个:

X16

X24

X48

X32

TButton或TImage中的TA和直接访问ICO都来自这几个图像列表。

我的问题是当我需要删除一个噩梦时

我想到为每个人设置一个CONST值,但由于某些用于TActions,它不是一个完整的解决方案。

你们是如何做到这一点的?你们需要解决哪些解决方案或至少改善这一点? 我使用DELPHI 2007。

2 个答案:

答案 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);