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的数据文件名前会出现空白的一段位置
但图片就是出不来
请问是不是这样不行  有没什么好的方法啊?

解决方案 »

  1.   

    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;
      

  2.   

    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;
      

  3.   

    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里面显示出来的图片都是文件夹的图片