我通过SHELL函数获取一个文件的图标。
function GetFileIcon(FileName: string): TIcon;
var SHFileInfo: TSHFileInfo;
begin
  if SHGetFileInfo(PChar(FileName),
                    0,
                    SHFileInfo,
                    SizeOf(SHFileInfo),
                    SHGFI_ICON or SHGFI_SYSICONINDEX) > 0 then
  begin
    result:= TIcon.Create;
    Result.Handle:= SHFileInfo.hIcon;
  end else
    Result:= nil;
end;获取到的图标放到一个TImage中显示。显示很正常(和在windows资源管理器中的效果一样,图标周边有阴影效果)。
但添加到一个TListView中显示时,就明显不对了。边上出现了一圈黑边(我想在windows下应该是阴影效果)。请教能在TListView中也正常显示的方法(能显示出阴影效果)。是不是有类似windows资源管理器中显示文件的控件呢。因为TListView选中后的效果和windows(XP)中选中后的效果也不同。想做个和windows选中后效果一样的。我是以windows media player的图标做测试的。

解决方案 »

  1.   

    没弄过,不清楚,DELPHI自带的DEMO中有一个C:\Program Files\Borland\Delphi7\Demos\Virtual Listview
    不知道符合不符合你的要求。
      

  2.   

    按 wudi_1982(城里人真傻!) 说的看了。确实demo中显示出来的图标效果是和windows中显示的一摸一样的。但domo中并没有用到TimageList.而是将TListView关联的ImageList设置成了系统的ImageList。
    demo中设置的方法如下:
      ImageListHandle := SHGetFileInfo('C:\',
                               0,
                               FileInfo,
                               SizeOf(FileInfo),
                               SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
      SendMessage(ListView.Handle, LVM_SETIMAGELIST, LVSIL_NORMAL, ImageListHandle);但我把TListView的TImageList关联成一个delphi带的TImageList。 这个问题实在是困扰了好久了。
    我从一个exe中提取出了一个图标。该图标放到windows中显示能有很好的效果。但直接在TimageList中添加该图标。图标周边就会出现一个黑边。
    不知道是不是TImageList的问题。恳请各位大侠指点小弟。。不胜感激。
      

  3.   

    用Samples标签下的TShellListView控件