【问题标题】:Display secondary underlying image on a Imagelist?在 Imagelist 上显示次要底层图像?
【发布时间】:2012-07-15 18:41:15
【问题描述】:

我有一个分配给列表视图的图像列表以显示透明图像。

关于添加的一些透明图像有一个小问题,那就是有时很难在列表视图中看到/找到它们。

查看此示例图片:

您会注意到图像(尤其是鼠标)几乎看不到,事实上,如果添加了一个空图像,您甚至都看不到它,这里的数字标题会起到拯救作用,表明确实存在一些东西。

但我想让图像在视觉上更容易看到。我想也许在透明图像下面放另一个图像会起作用 - 当然它不会影响实际图像。

考虑到这一点,我制作了一个棋盘格位图:

我觉得这将是表示图像透明区域的最合适方式,就像 Paint.NET 等一样。

为了进一步说明这个例子,如果我们将棋盘位图作为底层图像,我已经修改了原始图像以显示它的外观:

如果有棋盘,则首先表明那里有一个列表项,棋盘网格的位图可能更暗或完全不同的图像。正如我之前所说,如果没有图像,您将什么也看不到,所以显示一个空的国际象棋网格或其他位图总比什么都没有好。

那么,如何使用图像列表在原始图像下方显示第二张图像以提供类似于上面示例的结果?下面的图像可以是任何东西 - 例如只是另一个加载的位图。

【问题讨论】:

  • 对不起,如果我不明白这个问题,你为什么不把棋盘加载到位图上,然后在上面画你的透明图像,然后你可以在任何你想要的地方绘制位图?跨度>
  • @SertacAkyuz 但如果我这样做了,这两个图像不会合二为一吗?例如,如果我在棋盘上画了狮子然后保存它不会用狮子保存棋盘吗?我只想在下面显示棋盘位图 - 不要将它与实际图像结合起来。
  • 保存什么?图像列表中的图像?您已经在图像列表中拥有它。我想我还是不明白这个问题..
  • @SertacAkyuz 我需要将图像从图像列表保存到文件中,所以我不想用它来保存棋盘。棋盘位图纯粹是为了更好地在列表视图中直观地表示图像。

标签: delphi delphi-xe


【解决方案1】:

如果您将棋盘存储为第一个图像(索引为 0)并制作来自OnGetImageIndex 事件处理程序中的当前图像的叠加图像,它将执行您想要的操作。但是我不确定每次触发事件时制作覆盖图像的效率如何。

procedure TForm1.ListView1GetImageIndex(Sender: TObject; Item: TListItem);
begin
  // make the overlay (with overlay index 1) from the 
  // image with index Item.Index + 1
  ImageList1.Overlay(Item.Index + 1, 1);
  // use the first image from the list as a background
  Item.ImageIndex := 0;
  // and assign just created overlay index for overlay
  Item.OverlayIndex := 1;
end;

【讨论】:

  • 谢谢,我会试试看效果如何。即使它有效,我也会在几天内无人回答,然后我们可以看看是否有另一种方法:)
  • 当然,我也想知道是否有一些有效的方法。这在我看来有点自然,但我不喜欢在频繁触发的事件中创建掩码。
  • 我在一个包含大约 200 张图像的图像列表上对此进行了测试,它似乎可以很好地完成这项工作,我认为它没有负面影响。
【解决方案2】:

我看来你需要的是一个具有额外功能的 TImageList。

作为起点,我建议您考虑Inside Delphi 2006

一书中描述的TImageListEx

摘录:

TImageListEx 组件是一个 TImageList 后代,可以使用 来自另一个图像列表的图像以生成禁用图像,这可以 用于工具栏和其他用户界面元素。

TImageListEx 组件是一个 TImageList 后代,可以使用 来自另一个图像列表的图像以生成禁用图像,这可以 可用于工具栏和其他用户界面元素。

TImageListEx 组件有几个好处:

  • 无需创建禁用字形。

  • 无需在设计时将禁用的字形添加到额外的 TImageList 组件。

  • 它可以显着减小 .dfm 文件和整个应用程序的大小,尤其是在使用大量 字形。

  • 它非常快,只需几毫秒即可禁用图像列表中的所有图像,即使有很多图像。

  • 它非常轻巧。 (如果将它添加到已经使用标准 TImageList 组件的应用程序中,它不会增加 可执行文件的大小,如果将其添加到应用程序 不使用标准 TImageList 组件,开销是 只有 2 KB。)

这与您的要求相去甚远,但足够详细,可以展示如何扩展 TImageList。

【讨论】:

  • 我知道 GR32 - 我不确定这会有所帮助,因为它涉及调整列表视图/图像列表。
  • 对不起,我第一次尝试回答是题外话。进行了编辑以提出其他更有价值的建议。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2017-12-25
  • 2016-06-27
相关资源
最近更新 更多