Autor |
Beitrag |
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Sa 11.02.06 09:40
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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 11.02.06 14:57
Hallo,
die Dateien müssen nicht auf der Platte vorhanden sein
ein kleines Beispiel mit einer ListView:
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; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Heiko 
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Fr 17.02.06 16:11
Thx, funktioniert wie ich es brauche  . (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
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Di 28.02.06 15:41
Hallo,
Handycommander hat folgendes geschrieben: | ...wobei das img ein ordner ist! und keine datei... |
genau  , 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
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|