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
我这段程序是最好的。
你可以看看我的软件,就是采用这个程序的。
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;
一找一大堆 哈哈哈
懒人...鄙视你一下先