关于在listview上显示系统图标的问题,高手看过来!

beil0eve 2006-09-07 09:06:40
with Listview1 do
begin
SmallImages:=TImageList.CreateSize(16,16);
SmallImages.ShareImages := True;
SmallImages.Handle := SHGetFileInfo('*.*',0,FileInfo,SizeOf(FileInfo),SHGFI_ICON);
Drawicon(canvas.handle,5,170,FileInfo.hIcon);
end;


这段代码执行以后 listview的数据文件名前会出现空白的一段位置
但图片就是出不来
请问是不是这样不行 有没什么好的方法啊?
...全文
205 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
beil0eve 2006-09-08
  • 打赏
  • 举报
回复
begin
if not Assigned(ListView1.SmallImages) then
begin
Listview1.SmallImages:=TImageList.CreateSize(16,16);
Listview1.SmallImages.ShareImages := True;
ListView1.SmallImages.Handle := SHGetFileInfo('c:\',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
end;

SHGetFileInfo('c:\AUTOEXEC.BAT',0,FileInfo,SizeOf(FileInfo),SHGFI_ICON);
newitem := ListView1.Items.Add;
newitem.ImageIndex := FileInfo.iIcon;
newitem.Caption := 'autoexec.bat';

SHGetFileInfo('c:\windows',0,FileInfo,SizeOf(FileInfo),SHGFI_ICON);
newitem := ListView1.Items.Add;
newitem.ImageIndex := FileInfo.iIcon;
newitem.Caption := 'windows';


listview1.Items.Clear;
//获取shelltreeview目录路径
strpath:=(shelltreeview.Path+'\'+'*.*');
// showmessage(strpath);
// if length(shelltreeview.Selected.Text)<=3 then
// strpath:=shelltreeview.selected.Text+str
// else
// strpath:=shelltreeview.selected.Text+'\'+str;
//找到第一条数据
flag:=findfirst(strpath,faanyfile,srec);
//先判断是否找到了第一条数据
if flag=0 then
begin
//将找到的数据加入tlistview
newitem:=listview1.Items.Add;
newitem.Caption:=srec.Name;
newitem.ImageIndex:=fileinfo.iIcon;
// newitem.SubItems.Add()
newitem.SubItems.Add(inttostr(srec.Size));
newitem.SubItems.Add(datetimetostr(filedatetodatetime(srec.Time)));
if srec.Attr=16 then newitem.ImageIndex:=1;//是目录
while (findnext(srec)=0)do
begin
newitem:=listview1.Items.Add;
newitem.Caption:=srec.Name;
newitem.ImageIndex:=fileinfo.iIcon;
newitem.SubItems.Add(inttostr(srec.Size));
newitem.SubItems.Add(datetimetostr(filedatetodatetime(srec.Time)));
if srec.Attr=16 then newitem.ImageIndex:=1;
end;
end;
listview1.AlphaSort;


在listview里面显示出来的图片都是文件夹的图片
erhan 2006-09-08
  • 打赏
  • 举报
回复
var
FileInfo: SHFILEINFO;
mLi: TListItem;
begin
if not Assigned(ListView1.SmallImages) then
begin
Listview1.SmallImages:=TImageList.CreateSize(16,16);
Listview1.SmallImages.ShareImages := True;
ListView1.SmallImages.Handle := SHGetFileInfo('c:\',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
end;

SHGetFileInfo('c:\AUTOEXEC.BAT',0,FileInfo,SizeOf(FileInfo),SHGFI_ICON);
mLi := ListView1.Items.Add;
mLi.ImageIndex := FileInfo.iIcon;
mLi.Caption := 'autoexec.bat';

SHGetFileInfo('c:\windows',0,FileInfo,SizeOf(FileInfo),SHGFI_ICON);
mLi := ListView1.Items.Add;
mLi.ImageIndex := FileInfo.iIcon;
mLi.Caption := 'windows';
end;
beil0eve 2006-09-07
  • 打赏
  • 举报
回复
没用
显示出来的都是个手的图标
不是系统自带的图
老之 2006-09-07
  • 打赏
  • 举报
回复
var FileInfo: _SHFILEINFOA;
begin
with ListView1 do
begin
ViewStyle:=vsList;
SmallImages:=TImageList.CreateSize(16,16);
SmallImages.Handle:=SHGetFileInfo('c:\',0,FileInfo,sizeof(FileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
SmallImages.ShareImages := True;
end;
end;

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧