Entwickler-Ecke
Windows API - Icons von Dateiendungen auslesen
Heiko - Sa 11.02.06 09:40
Titel: Icons von Dateiendungen auslesen
Hi @all,
ich brauche die Icons von den Dateiendung, also die die auch der Explorer für einen Typ stamndardmäßig nimmt, also nicht die speziellen Icons wie bei EXEn. Mein Problem ist, dass ich nur "virtuelle" Dateien habe (liegen auf einem Server ) und damit SHGetFileInfo nicht funktioniert (kann ja nix auf der Festplatte finden ;) ). Wie kann ich also ohne SHGetFileInfo die Icons auslesen?
mfg
Heiko
Lannes - Sa 11.02.06 14:57
Titel: Re: Icons von Dateiendungen auslesen
Hallo,
die Dateien müssen nicht auf der Platte vorhanden sein :wink:
ein kleines Beispiel mit einer ListView:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure InitialisiereIcons; var SysIL : uint; SFI : TSHFileInfo; SmallImages : TImageList; begin SmallImages := TImageList.Create(Form1); SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); if SysIL <> 0 then begin SmallImages.Handle := SysIL; SmallImages.ShareImages := TRUE; end; Form1.ListView1.SmallImages := SmallImages; end;
procedure TForm1.FormCreate(Sender: TObject); begin InitialisiereIcons; end;
procedure TForm1.Button1Click(Sender: TObject); var aItem : TListItem; Info: TSHFileInfo; aFile : String; begin aFile := 'dammy.txt'; aItem := ListView1.Items.Add; aItem.Caption := aFile; SHGetFileInfo(PChar(aFile), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES); aItem.ImageIndex := Info.IIcon; end; |
Heiko - Fr 17.02.06 16:11
Thx, funktioniert wie ich es brauche :flehan: . (Das ausprobieren hat eine Weile gedauert da ich in der zwischenzeit wo anders eine Baustelle angefangen hatte und erst einmal beenden wieder wollte bevor ich irgendwo noch ein Loch grabe ;) ).
Handycommander - Di 28.02.06 13:56
hab den source auch hergenommen...
nur geht der bei mir nicht ganz...
wobei das img ein ordner ist! und keine datei...
siehe bild...
was mache ich falsch?
Lannes - Di 28.02.06 15:41
Hallo,
Handycommander hat folgendes geschrieben: |
...wobei das img ein ordner ist! und keine datei... |
genau :wink: , das sieht man auch auf Deinem Bild, da steht hinter img in der zweiten Spalte der ListView ja auch
Datei. Du übergibst den Ordnernamen als Dateinamen, und deshalb zeigt er Dir das Icon an, das auch im Explorer für Dateien ohne Extension angezeigt wird.
Ein Ordner-Icon und auch Laufwerks-Icons kannst man so ermitteln und einem Listview-Eintrag zuweisen:
:!: in
uses ShlObj einbinden :!:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button2Click(Sender: TObject); var aItem : TListItem; Info: TSHFileInfo; aOrdner : String; aDW : DWORD; IShFolder : IShellFolder; aItemIdList : PItemIdList; wsOrdner : WideString; begin aOrdner := 'c:\temp'; aItem := ListView1.Items.Add; aItem.Caption := aOrdner; SHGetDesktopFolder(IShFolder); wsOrdner := aOrdner; IShFolder.ParseDisplayName(0,nil,PWideChar(wsOrdner),aDW,aItemIdList,aDW); SHGetFileInfo(PChar(aItemIdList), 0, Info, SizeOf(TSHFileInfo), SHGFI_PIDL or SHGFI_ICON or SHGFI_SMALLICON); aItem.ImageIndex := Info.IIcon; end; |
//Edit: Hinweis auf ShlObj in uses hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!