Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 是否在Imagelist上显示次基础图像?_Delphi_Delphi Xe - Fatal编程技术网

Delphi 是否在Imagelist上显示次基础图像?

Delphi 是否在Imagelist上显示次基础图像?,delphi,delphi-xe,Delphi,Delphi Xe,我有一个分配给listview的图像列表来显示透明图像 对于添加的一些透明图像,这有一个小问题,即它们有时在listview中很难看到/找到 请参见此示例图像: 你会注意到这些图像(很明显是鼠标)几乎看不见,事实上,如果添加了一个空图像,你甚至看不到它,数字标题在这里起到了解救作用,表明确实存在一些东西 但是我想让图像在视觉上更容易看到。我想在透明图像下面再放一张图像可能会有用——当然,这不会影响实际图像 考虑到这一点,我制作了一个棋盘格位图: 我觉得这将是表示图像透明区域的最合适的方式,就

我有一个分配给listview的图像列表来显示透明图像

对于添加的一些透明图像,这有一个小问题,即它们有时在listview中很难看到/找到

请参见此示例图像:

你会注意到这些图像(很明显是鼠标)几乎看不见,事实上,如果添加了一个空图像,你甚至看不到它,数字标题在这里起到了解救作用,表明确实存在一些东西

但是我想让图像在视觉上更容易看到。我想在透明图像下面再放一张图像可能会有用——当然,这不会影响实际图像

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

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

为了进一步说明此示例,我修改了原始图像以显示其外观,如果我们将棋盘位图作为参考底图图像:

如果棋盘在那里,首先表明那里有一个列表项,棋盘格的位图可能会更暗,或者是一种完全不同的图像。正如我前面所说的,如果没有图像,您将什么也看不到,所以最好显示一个空的棋盘格或其他位图,而不是什么都看不到


那么,如何使用imagelist在原始图像下方显示第二个图像,以给出类似于上述示例的结果?下面的图像可以是任何内容—例如,只是另一个加载的位图。

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

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;

我想你需要的是一个具有额外功能的TImageList

作为一个出发点,我建议您在《强》内部的Delphi 2006 < /强>

中描述<强> <强>。 摘录:

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

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

TImageListEx组件有几个好处:

  • 它消除了创建禁用图示符的需要

  • 它消除了在设计时将禁用的图示符添加到其他TImageList组件的需要

  • 它可以大大减少.dfm文件和整个应用程序的大小,特别是在使用大量数据的大型应用程序中 字形

  • 它的速度非常快,只需几毫秒就可以禁用图像列表中的所有图像,即使存在多个图像

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


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

谢谢,我将尝试一下,看看它的效果如何。即使它起作用,我也会在几天内保持沉默,然后我们可以看看是否有其他方法:)当然,我也在想是否有有效的方法来解决这个问题。在我看来,这似乎很自然,但我不喜欢在频繁触发的事件中创建遮罩。我在大约200张图像的imagelist上测试了这一点,它似乎做得足够好,我看不到它带来的负面影响。如果我不理解这个问题,很抱歉,你为什么不把棋盘加载到位图中,然后在上面画出你的透明图像,然后你可以在任何地方画出你想要的位图?@SertacAkyuz但如果我这样做了,这两个图像不会变成一个吗?例如,如果我在棋盘上画狮子,然后保存它,那么棋盘不会与狮子一起保存吗?我只想在下方显示棋盘位图,而不是将其与实际图像组合。保存什么?图像列表中的图像?您已经在imagelist中找到了它。我想我还是不明白这个问题。@SertacAkyuz我需要将图像从imagelist保存到文件,所以我不想用它保存棋盘。棋盘位图纯粹是为了更好地在listview中直观地表示图像。我了解GR32-我不确定这是否有帮助,因为它涉及调整listview/imagelist。对不起,我第一次尝试回答的问题是离题的。做了一次编辑,提出了一些更有价值的建议。谢谢