合并图标 ( 积分: 100 )

  • 主题发起人 主题发起人 warmfish
  • 开始时间 开始时间
W

warmfish

Unregistered / Unconfirmed
GUEST, unregistred user!
一个是背景图标,一个标志图标,如何编写代码,将两个图标合并(即标志图标在背景图标上面显示)?
 
一个是背景图标,一个标志图标,如何编写代码,将两个图标合并(即标志图标在背景图标上面显示)?
 
CopyMode := srcPaint;//或者用MERGECOPY
Canvas.CopyRect...
 
谢谢,bmp图标可以了,但是ico呢?
 
procedure TForm1.FormDblClick(Sender: TObject);
var
ico :TIcon;
begin
ico :=TIcon.Create;
try
ico.LoadFromFile('2.ico');//64 * 64
Image1.Canvas.Draw(0,0,ico);
ico.LoadFromFile('1.ico');//32 * 32
Image1.Canvas.Draw(0,0,ico);
finally
ico.Destroy;
end;
end;
 
楼主是要使TImageList 像快捷方式一样能加个小箭头之类的效果吗?如果是的话可以用ImageList_SetOverlayImage()函数设置ImageList的OverlayImage。
 
YuZi说的正是我想实现的,谢谢!
但是我发现C++Builder似乎有Bug,具体如下:

若要出正确的效果,代码必须如下
pTreeNode->ImageIndex=0;
if(ImageList2->Overlay(1,0))
pTreeNode->OverlayIndex=0;

但是上述代码好像有明显的不合理,我认为应该是:
pTreeNode->ImageIndex=1;
if(ImageList2->Overlay(1,0))
pTreeNode->OverlayIndex=0;

请YuZi指教!
 
dawnsong,谢谢!我尝试结果如下:
先按照你的方法,进行图像合并,然后好像只能通过“SaveToFile”导出bmp格式的文件,才能再导入到TImageList中
 
楼主可能没有弄清楚Overlay(i,j)两个参数的意思。它是用来指定用来覆盖的图标的图标索引和自己定义的新的引用编号,即:
i是指定ImageList中哪个图标用来作“覆盖图标”用,
j是指设定的编号,以后TreeNode设定OverlayIndex时就是引用这个编号。j是TOverlay型,其实就是0..3,也就是说一般只能自定义4个引用编号。
像你上面Overlay(1,0),是指把ImageList中的索引1的图标作为“覆盖图标”,设定编号为0,以后pTreeNode->OverlayIndex=0就是指把索引1的图标用来覆盖,如果ImageIndex和OverlayIndex都指向同一个图标,就等于是只显示一个图标了,比如你上面:
pTreeNode->OverlayIndex=0的“覆盖图标”是1和pTreeNode->ImageIndex=1
其实指向了同一个图标.

pTreeNode->ImageIndex=1的图标索引与Overlay(i,j)设定是无关的。
 
YuZi,谢谢,我明白了!
 
楼主结贴吧,
我现在做一个小东东,正是大大的需要用分呀。。。。
 
多人接受答案了。
 
后退
顶部