-1

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

有一个:

X16

X24

X48

X32

将 ICO 放置在 TButton 或 TImage 中的 TAction 和直接访问都来自这几个图像列表。

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

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

你们是怎么做的?你们有什么解决方案来解决或至少改善这个问题?我用的是德尔福 2007。

4

2 回答 2

4

我所做的是在运行时通过从资源加载来添加所有图标。当我添加它们时,我将添加图标的索引保存到全局变量中。我还在运行时通过引用这些全局变量来分配每个操作的 ImageIndex 属性。

这允许灵活地在项目中添加和删除图标,而不会出现编号问题。该方法适合基于字体缩放的运行时图标大小决策。缺点是您在设计时看不到图像,这是一个缺点。如果您想拥有上面概述的所有灵活性,我看不到更好的解决方案。在理想情况下,图像将通过名称或 ID 而不是数组中的连续索引来标识。但要实现这一点,您需要在 VCL 之上实现大量代码。

于 2011-12-21T15:31:36.527 回答
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);
于 2011-12-21T17:08:13.350 回答