请问当客户端读取FTP服务器文件列表之后,怎样把图标也显示出来,(譬如:有一个文件叫text.ZIP,但我怎么知道它是一个ZIP文件,并用winzip的图标显示出来!)

解决方案 »

  1.   

    ExtractFileExt(const filename:string)可以得到文件的扩展名
    ExtractAssociatedIcon(hInstance,pchar('xxx.'+FileExt),index)可以得到文件相关的图表,如果你的机子上装了winzip,FileExe='zip',那么你就可以得到zip的图标,其实的到文件的扩展名后做个判断,然后从ImageList里面掉入相应的图标就行了
      

  2.   

    慢慢看这段代码在Listview设置如下
    SmallImages:=TImageList.CreateSize(32,32);
    SmallImages.ShareImages:=True;
    SmallImages.Handle:= ShGetFileInfo('', 0, FileInfo,SizeOf(SHFileInfo), SHGFI_SYSICONINDEX  or SHGFI_SMALLICON );
    end;
    其添加行时设置如下
    with Result do
      begin
        Caption:=filename;imageindex:= GetFileIconIndex(filename,nmftp1.FTPDirectoryList.Attribute[i]);
      end;其中
    function GetFileIconIndex(FileName,attribute:string):integer;
       var  fileinfo:tshfileinfo;
        begin
        if attribute[1]='d' then
        result:=4
        else
        begin
      ShGetFileInfo(Pchar(FileName), 0, FileInfo,SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON);
      Result:=FileInfo.iIcon;
      end;
    end;
      

  3.   

    为什么编译的时候总是说我没有定义ShGetFileInfo,这个是什么函数,怎样用?
      

  4.   

    ShGetFileInfo在ShellAPI中,要Uses ShellAPI的,是获得外壳文件信息的
    上面的方法是OK的
      

  5.   

    是跟 ly_liuyang(Liu Yang) 说的那样。。我忘了