在ListView中添加一些32位色的图标(图标形状最好不要是正方形),添加后,图标边线上总会有一个黑圈。感觉好像是XP图标的透明色不能被正确的显示。
不管是用Delphi7自带的ImageList还是用API ImageList_Create 自己创建都不行。
也试过用 SHGetFileInfo 获取图标句柄后直接通过 ImageList_AddIcon 添加,不通过Delphi7的TIcon类,但添加出来的还是有黑圈。但Delphi7 自带的Demo:Virtual ListView中,通过设置系统的图标,却能完美在ListView上将Xp的效果显示出来。
  ImageListHandle := SHGetFileInfo('C:\',
                           0,
                           FileInfo,
                           SizeOf(FileInfo),
                           SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
  SendMessage(ListView.Handle, LVM_SETIMAGELIST, LVSIL_NORMAL, ImageListHandle);自己试了好多方法,实在是找不到原因,请教各位高手帮下小弟。

解决方案 »

  1.   

    没人能指点下吗? 我在网上找到一个能支持XP图标alpha通道显示的控件,不过是VB的,Rmlistview,有没有人知道delphi下有没有类似控件
      

  2.   

    那些图标是ICO格式的,别的格式都会有黑圈的,除非特殊处理
      

  3.   

    图标当然是ICO格式的,就是ICO格式的图标有黑圈。图标文件是ICO文件。不知道为什么用设置系统的图标就能正确显示alpha通道,因为ListView本身应该仅仅是负责绘制,是不是windows 的 ImageList不支持alpha通道。
    delphi的demo里也只是获取了系统的图标资源,而通过自己创建一个ImageList_Create,却不能很好的支持alpha,想来想去似乎只有这里可能存在问题了。
      

  4.   

    CustomDraw
    CustomDrawItem
    CustomDrawSubItem