http://www.csdn.net/Expert/forum.asp?typenum=8&searchKeys=ExtractICON&roomid=3&author=&tabletype=now
用这个地址,你可以找到N个

解决方案 »

  1.   

    主要实现方法是用EXTRACTICON函数,当然,这是一个API函数,你要加上:
    uses 
      shellapi;
      

  2.   

    这是我写的显示指定路径的文件夹和文件信息的函数:
    procedure TfrmMain.ChangeListViewData(strPath:String);
    var
      FSearchRec:TSearchRec;
      FindResult,i:integer;
      FileInfo: TSHFileInfo;
      Item:TListItem;
      strListDir,strListFile:TStringList;
    begin
      strListDir:=TStringList.Create;
      strListFile:=TStringList.Create;
      ListView1.Items.Clear;
      strPath:=GetDirectoryName(strPath);
      FindResult:=FindFirst(strPath+'*.*',
                            faHidden+faReadOnly+faSysFile+faDirectory,FSearchRec);
      if FindResult<>0 then Exit;
      try
        while FindResult=0 do
        begin
          if ((FSearchRec.Attr and faDirectory) = faDirectory)
              and (FSearchRec.Name<>'.') then
          begin
            strListDir.Add(FSearchRec.Name);
          end;
          FindResult:=FindNext(FSearchRec);
        end;
      finally
        FindClose(FSearchRec);
      end;
      strListDir.Sort;
      FindResult:=FindFirst(strPath+'*.*',
                            faAnyFile+faHidden+faReadOnly+faSysFile,
                            FSearchRec);
      try
        while FindResult=0 do
        begin
    //      if FSearchRec.Name<>'.'then
    //      begin
            strListFile.Add(FSearchRec.Name);
    //      end;
          FindResult:=FindNext(FSearchRec);
        end;
      finally
        FindClose(FSearchRec);
      end;
      strListFile.Sort;
      StatusBar1.Panels[2].Text:='共'+IntToStr(StrListDir.Count)+'个文件夹    '
                                     +IntToStr(StrListFile.Count)+'个文件';
      strListDir.Text:=strListDir.Text+StrListFile.Text;
      ListView1.Items.BeginUpdate;
      For i:=0 to strListDir.Count-1 do
      begin
        SHGetFileInfo(
          PChar(strPath+strListDir.Strings[i]),
          0,
          FileInfo,
          SizeOf(FileInfo),
          SHGFI_ICON+SHGFI_TYPENAME );    FindFirst(strPath+strListDir.Strings[i],
                            faAnyFile+faHidden+faReadOnly+faSysFile+faDirectory,
                            FSearchRec);    Item:=ListView1.Items.Add();
        Item.Caption:=strListDir.Strings[i];
        if strListDir.Strings[i]='..' then
          Item.ImageIndex:=5 //5为一尝试值,代改进
        else
          Item.ImageIndex:=FileInfo.iIcon;
        //ShowMessage(inttostr(Fileinfo.iicon));
        if ((FSearchRec.Attr and faDirectory)=faDirectory)
            or (strListDir.Strings[i]='..') then
          Item.SubItems.Add('')
        else
          Item.SubItems.Add(IntToStr(FSearchRec.Size)+'字节');
        Item.SubItems.Add(FileInfo.szTypeName);
        Item.SubItems.Add(DateTimeToStr(FileDateToDateTime(FSearchRec.Time)));
        FindClose(FSearchRec);
      end;
      ListView1.Items.EndUpdate;
      strListFile.Free;
      strListDir.Free;
    end;