正在加载...

PF BLOG

解决Listview中获取程序图标“毛边儿”(黑边儿)问题

取得含程序图标的程序列表时,一般的思路都是将图标用 API函数SHGetFileInfo获取图标ico句柄,并加载到imagelist中,供Listview调用,这样固然可以出效果:

未命名.jpg

大小: 5.02 K
浏览: 3 次

但看着图标毛刺儿一样的黑边儿心里很不爽,网上搜了一番,有反映是imagelist的问题,那么就试着直接把图标绑定到Listview上:

首先要自己写一个小图标集:

uses ShellApi,CommCtrl
...
var  S_ImageListHandle: THandle;//小图标集句柄
     FileInfo: SHFILEINFO;
...
//绑定图标集
  S_ImageListHandle := SHGetFileInfo(PChar('C:\'),0,FileInfo,
      SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);//取得小图标集句柄
  SendMessage(Listview1.Handle,LVM_SETIMAGELIST,LVSIL_SMALL,S_ImageListHandle);//将小图标集句柄指给列表

这样就绑定了一个图标集给listview(相关参数解释请查询MSDN)。

在程序中循环输出列表的时候:

with ListView1.Items.Add do
   begin
      if SHGetFileInfo(PChar('程序路径'),0,FileInfo,
       SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON) <> 0 then//取得小图标集句柄
        ImageIndex := FileInfo.iIcon
      else ImageIndex := -1;
      Caption := '程序名';
      SubItems.Add('其他内容');
    end;

这样就可以了。看改良后的效果:

2011-12-28_172710.jpg

大小: 9.75 K
浏览: 0 次

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):