Einzelnen Beitrag anzeigen

Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

SHGetFileInfo benutzen um verknüpftes Datei-Icon anzuzeigen?

  Alt 26. Mär 2004, 23:36
Edit: Problem gelöst!

Hey da,

Ich hatte vor, in einer Listview Dateinamen und das dazugehörige Icon darzustellen.
Um das Icon zu bekommen, mache ich Folgendes:

Delphi-Quellcode:
//System-Imagelist Handle besorgen
procedure TSearchForm.FormCreate(Sender: TObject);
var FI: SHFILEINFO;
begin
 ImageList3.Handle := SHGetFileInfo('', 0, FI, SizeOf(FI) ,
                      SHGFI_SYSICONINDEX or SHGFI_SMALLICON );
 If ImageList3.Handle <> 0 then
   ImageList3.ShareImages := True;
(* ... *)
end;

//Icon-Index besorgen
function TSearchForm.GetShellImage(Path: PChar): Integer;
var
  FileInfo : TSHFileInfo;
  FileInfoResult: DWORD;
begin
 Result := -1;
 FileInfoResult :=SHGetFileInfo(Path, 0, FileInfo, sizeof(FileInfo),
           SHGFI_ICON OR SHGFI_SMALLICON OR SHGFI_SYSICONINDEX );
 If FileInfoResult<>0 then
  Result := FileInfo.iIcon
   else
    begin
(*  FileInfoResult := GetLastError;
     ShowMessage(SysErrorMessage(FileInfoResult)); *)
                                               
    end;
end;

//und schließlich...
procedure TSearchForm.AddSearchResult(Folder: String; var FileInfo: TsearchRec);
var newItem: TListItem;
begin
 Application.ProcessMessages;
 newItem := LV.Items.Add;
 If Folder[Length(Folder)]<>'\then Folder := Folder + '\';
 with newItem do
  begin
   Caption := FileInfo.Name;
   ImageIndex := GetShellImage(Folder+FileInfo.Name);
   SubItems.Add(Folder);
   Subitems.Add(FormatFloat('#0,',FileInfo.Size / 1024)+' KB' );
   Tag := FileInfo.Size;
   SubItems.Add(GetFileDesc(Folder+FileInfo.Name));
  end;
end;
Man muss dabei nur beachten, dass man der Funktion GetShellImage auch nen gültigen Dateipfad übergibt!

Gruß,
Dani
Dani H.
  Mit Zitat antworten Zitat