delphi取得文件图标并在TListView中显示


本文整理自网络,侵删。

 
技术要点:
  一、使用SHGetFileInfo函数获取指定扩展名的文件图标。需要引用ShellAPI单元。
  二、使用TStringList来保存扩展名与其图标的索引号。当添加一个文件名至TListView后,
我们已经取得了其图标,再次添加同样扩展名的文件时,不需再次获取其图标,只要从该TStringList中取得其图标索引号即可}

uses
  ShellAPI;

var
  IconList:TStringList;

{ 实现获取图标及将图标添加到TImageList中的过程 }
procedure ListView_SetItemImageIndex(Item: TListItem);
var
  nIndex:Integer;
  Icon:TIcon;
  fileName:string;
  extName:string;
  sinfo:SHFILEINFO;
begin
  if TListView(Item.ListView).SmallImages<>nil then
  begin
    fileName:=Item.Caption;
    extName:=ExtractFileExt(fileName);
    nIndex:=IconList.IndexOf(extName);
    if nIndex>-1 then
    begin
      nIndex:=Integer(IconList.Objects[nIndex]);
      Item.ImageIndex:=nIndex;
    end else
    begin
      FillChar(sinfo, SizeOf(sinfo),0);
      SHGetFileInfo(PChar(extName),FILE_ATTRIBUTE_NORMAL,sinfo,SizeOf(sInfo),
                    SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SMALLICON);
      if sinfo.hIcon>0 then
      begin
        Icon:=TIcon.Create;
        Icon.Handle:=sinfo.hIcon;
        nIndex:=TListView(Item.ListView).SmallImages.AddIcon(Icon);
        Icon.Free;
        Item.ImageIndex:=nIndex;
        IconList.AddObject(extName,TObject(nIndex));
      end;
    end;
  end;
end;

{ 测试过程 }
procedure TForm1.Button1Click(Sender: TObject);
var
  Item:TListItem;
begin
  Item:=ListView1.Items.Add;
  Item.Caption:=‘c:\test.jpg‘;
  ListView_SetItemImageIndex(Item);
end;

{ 对IconList进行初始化及释放 }
initialization
  IconList:=TStringList.Create;
finalization
  IconList.Free;
end.  

相关阅读 >>

Delphi idhttp造成程序假死的解决办法

Delphi mscomm控件串口收发程序

Delphi 以低用户权限启动一个进程.比如vista或者win7中的ie

Delphi 简化版的inputquery 中文版输入对话框

Delphi捕获twebbrowser的close事件

Delphi中用tlistview显示数据库数据

Delphi thttpclient 时获取跳转后的 url

Delphi研究之驱动开发篇(二)--工具及环境搭建

Delphi html转义字符编码转换

Delphi 制作资源文件并释放运行

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...