TImageList.ShareImages - 如何正确使用而不必复制内容?

TImageList.ShareImages - How to use exactly to not have to copy the content?

我使用 C++ Builder,但我相信这个问题与 Delphi 同样相关。

当我有两个 TImageList 对象并且在某些时候我想在两个图像列表中使用相同的图标时,我可以复制内容:ImageList2.Assign(ImageList1) ;

但是,我注意到 TImageList.ShareImages 在帮助中建议我可以使用相同的内部列表,并节省资源复制!?但是记录不完整,因为我不确定如何才能准确地实现这一目标? 我该怎么做才能使 ImageList2 使用与 ImageList1 相同的内部列表? (然后我会设置ImageList2.ShareImages = true

我看源码,你是这样写的:

ImageList2->Handle = ImageList1->Handle;
ImageList2->ShareImages = true;

ShareImages 控制的只是图像列表句柄是否为列表的所有者。在这种情况下,它属于 ImageList1 而不是 ImageList2.

这样做的结果是 ImageList1 必须活下来 ImageList2。否则,如果 ImageList1 首先被销毁,那么 ImageList2 将保留已被销毁的图像列表的句柄。