我有一个分配给列表视图的图像列表以显示透明图像。
对于添加的一些透明图像,这有一个小问题,那就是它们有时很难在列表视图中看到/找到。
参见此示例图片:
您会注意到图像(显然是鼠标)几乎看不到,事实上如果添加了一个空图像,您甚至都看不到它,数字标题在这里拯救,以显示实际存在的东西。
但我想让视觉上的图像更容易看到。我想可能在透明图像下面有另一个图像可以工作 - 当然虽然它不会影响实际图像。
因此,考虑到这一点,我制作了一个棋盘网格的位图:
我觉得这是表示图像透明区域的最合适方式,就像Paint.NET等一样。
为了进一步说明这个例子,我修改了原始图像以显示它的外观,如果我们将棋盘位图作为底衬图像:
拥有棋盘会指示首先存在列表项,并且棋盘网格的位图可能更暗或者是完全不同类型的图像。正如我之前所说,如果没有图像,你根本就什么都看不见,所以最好显示一个空的国际象棋网格或其他位图而不是什么。
那么,如何使用图像列表在原始图像下方显示第二个图像,以得到与上述示例类似的结果?下面的图像可以是任何东西 - 例如,只是另一个加载的位图。
答案 0 :(得分:4)
如果您将棋盘存储为第一个图像(索引为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;
答案 1 :(得分:1)
我认为你需要的是具有额外功能的TImageList。
作为一个起点,我建议你考虑 Inside Delphi 2006
一书中描述的 TImageListEx摘录:
TImageListEx组件是一个可以使用的TImageList后代 来自另一个图像列表的图像可以生成禁用的图像 用于工具栏和其他用户界面元素。
TImageListEx组件是一个可以使用的TImageList后代 来自另一个图像列表的图像可以生成禁用的图像 用于工具栏和其他用户界面元素。
TImageListEx组件有以下几个好处:
无需创建禁用的字形。
无需在设计时将禁用的字形添加到其他TImageList组件。
它可以大大减小.dfm文件和整个应用程序的大小,尤其是在大量使用大量应用程序的应用程序中 字形。
它非常快,即使有大量图像,也只需几毫秒即可禁用图像列表中的所有图像。
它非常轻巧。 (如果将其添加到已使用标准TImageList组件的应用程序中,则不会增加 可执行文件的大小,如果将其添加到应用程序中 不使用标准TImageList组件的开销是 只有2 KB。)
这远远不是您的要求,但足够详细,以展示如何扩展TImageList。