Delphi 中 listview 根据文件扩展名 设置系统图标

var
  FileInfo : SHFILEINFO;
  wwImageList:THandle;
begin
// 第一步,  绑定系统图标
  wwImageList:=SHGetFileInfo('c:\',0,FileInfo,sizeof(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  ImageListListView.Handle:=wwImageList;
  ImageListListView.ShareImages:=true;

// 第二步设置图标
 with (RzListView1.Items.Add) do
      begin
        caption := ExtractFileName(filename);

        SHGetFileInfo(filename)),0,FileInfo,sizeof(FileInfo),SHGFI_USEFILEATTRIBUTES or SHGFI_ICON  or SHGFI_SMALLICON);

        ImageIndex := FileInfo.iIcon;
      end;

 参考帖子 1:  
http://bbs.csdn.net/topics/40356417 

参考帖子 2:http://bbs.csdn.net/topics/350051115



原帖: 作者 :CDSoftwareWj

回复于: 2003-11-26 16:26:24
用API函数SHGetFileInfo可以根据扩展名得到其Icon在系统中的编号,你可把ImageList同
系统的ImageList相连就行。
如:
var
   ImageList:THandle;
   FileInfo:TSHFileInfo
   Node:TTreeNode;
begin
     ImageList:=SHGetFileInfo('c:\',0,FileInfo,sizeof(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
     ImageList1.Handle:=ImageList;
     ImageList1.ShareImages:=true;
     SHGetFileInfo('.zip',0,FileInfo,sizeof(FileInfo),SHGFI_USEFILEATTRIBUTES|SHGFI_ICON|SHGFI_SMALLICON);
     TreeNode:=TreView1.Items.Add(nil,'*.zip');
     TreeNode.ImageIndex:=FileInfo.iIcon;
end;

ListView 类似

我这段程序是最好的。
你可以看看我的软件,就是采用这个程序的。
http://bolenl.myetang.com 中的(奥博文件管理员)

当我们要用LISTVIEW控件来列出文件时,怎么让LISTBIEW显示文件自己的图标,
下面的程序可以让你做到。(一个单元列子)

unit mainf;
interface
uses
  加入 shellapi,CommCtrl;
type
  Tform1 = class(TForm)    
    ListView1: TListView;    
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  form1: Tform1;
  B_ImageListHandle: THandle;//大图标集句柄
  S_ImageListHandle: THandle;//小图标集句柄

implementation

{$R *.DFM}

{Form 创建过程}
procedure Tform1.FormCreate(Sender: TObject);
var
  FileInfo: TSHFileInfo;
begin
//取得小图标集句柄
S_ImageListHandle := SHGetFileInfo('C:\',0,FileInfo,
SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
//将小图标集句柄指给列表
SendMessage(Listview1.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, S_ImageListHandle);
//取得大图标集句柄
B_ImageListHandle := SHGetFileInfo('C:\',0,FileInfo,SizeOf(FileInfo),
SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
//将大图标集句柄指给列表
SendMessage(FileList.Handle, LVM_SETIMAGELIST, LVSIL_NORMAL, B_ImageListHandle);
end;

现在你可以在其它的事件中,如OnChange取得文件的图标索引信息,然后指定ListView的ImageIndex
procedure Tform1.listviewChange(Sender: TObject; Item: TListItem;
  Change: TItemChange);
var ShFileInfo: TSHFILEINFO;
begin
//........这里是搜索文件和增加列表项的语句....................
WITH listview.items.add DO
Caption:='新文件名';
SubItems.Strings[0]:='ABCDKDDKDKDKD';
//..............开始取得文件图标索引
IF ShGetFileInfo(pchar(路径加+文件名), 0, SHFileInfo,SizeOf(SHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME)<>0 then
  Item.Imageindex:=SHFileInfo.iIcon
else 
  Item.Imageindex:=0;
end;



一找一大堆 哈哈哈

懒人...鄙视你一下先







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值