![]() |
Moin FriFra, moin Marco,
ihr habt doch beide ein D7 Version. In der müsste es doch den TShellTreeView/TShellListView geben. Was zeigen denn die an? Sollte es gehen, könnt ihr dann ja mal in den Sourcen nachsehen (sollte bei der Pro/Enterprise ja dabei sein) wie es dort gemacht wird. Ich hab' die ShellShock Kompos und dort wird nicht mit dem Dateinamen sondern der ItemIDList gearbeitet. |
Mit TShellTreeView/TShellListView klappt es...
Aber ich werd im moment nicht ganz schlau daraus... wie kann ich diese Funktion aus TShellTreeView/TShellListView verwenden, wenn ich einen Dateinamen übergeben will?
Delphi-Quellcode:
function GetShellImage(PIDL: PItemIDList; Large, Open: Boolean): Integer;
var FileInfo: TSHFileInfo; Flags: Integer; begin Flags := SHGFI_PIDL or SHGFI_SYSICONINDEX; if Open then Flags := Flags or SHGFI_OPENICON; if Large then Flags := Flags or SHGFI_LARGEICON else Flags := Flags or SHGFI_SMALLICON; SHGetFileInfo(PChar(PIDL), 0, FileInfo, SizeOf(FileInfo), Flags); Result := FileInfo.iIcon; end; |
Moin FriFra,
mit der Methode ParseDisplayName des Interface IShellFolder sollte man eine ITEMIDLIST die zum Namen gehört erhalten. Gemacht hab' ich das allerdings noch nicht. |
Re: Problem mit Shellicons...
Moin FriFra,
jetzt hab' ich das mal gemacht:
Delphi-Quellcode:
Bei mir funzt es, aber das tat's ja auch schon vorher ;-)
// uses SHLOBJ,SHELLAPI;
var isfWork : IShellFolder; piidWork : PItemIdList; dwDummy : DWORD; fiWork : TSHFileInfo; wsWork : WideString; begin // Interface auf IShellLink holen SHGetDesktopFolder(isfWork); // Vielleicht geht auch nur die Extension wsWork := 'Pfad der Datei'; // Weil Borland ja bei Pointern immer var Parameter nimmt ist ein Dummy erforderlich dwDummy := 0; // ItemIdList des Pfades holen isfWork.ParseDisplayName(0,nil,PWideChar(wsWork),dwDummy,piidWork,dwDummy); // Und die Info abfragen SHGetFileInfo(PChar(piidWork),0,fiWork,SizeOf(fiWork),SHGFI_PIDL or SHGFI_ICON or SHGFI_SMALLICON); // fiIcon.iIcon enthält jetzt auch den Index in der SystemImageList, hIcon das Handle end; Ich weiss etwas spät :oops: |
Re: Problem mit Shellicons...
Leider funktioniert auch dieser Code nicht:
![]() Deinen Code habe ich wie folgt implementiert:
Delphi-Quellcode:
function TMain.GetShellIcon(FileName: string): integer;
var isfWork : IShellFolder; piidWork : PItemIdList; dwDummy : DWORD; fiWork : TSHFileInfo; wsWork : WideString; begin Result:=0; // Interface auf IShellLink holen SHGetDesktopFolder(isfWork); //Falls ein Laufwerksbuchstabe übergeben wurde... if Length(FileName) = 1 then FileName := FileName + ':'; //Laufwerke sollten mit \ enden... if (Length(FileName) = 2) and (copy(FileName, length(FileName), 1) = ':') and (copy(FileName, length(FileName), 1) <> '\') then FileName := FileName + '\'; // Dateiname; Vielleicht geht auch nur die Extension wsWork := FileName; // Weil Borland ja bei Pointern immer var Parameter nimmt ist ein Dummy erforderlich dwDummy := 0; // ItemIdList des Pfades holen isfWork.ParseDisplayName(0,nil,PWideChar(wsWork),dwDummy,piidWork,dwDummy); // Und die Info abfragen SHGetFileInfo(PChar(piidWork),0,fiWork,SizeOf(fiWork),SHGFI_PIDL or SHGFI_ICON or SHGFI_SMALLICON); // fiWork.iIcon enthält jetzt auch den Index in der SystemImageList, hIcon das Handle try //IconIndex liefern... Result := fiWork.iIcon finally // you are responsible for destroying the icon handle DestroyIcon(fiWork.hIcon); end; end; |
Re: Problem mit Shellicons...
Moin FriFra,
komisch. Das ist doch eigentlich genauso, wie der ShellTreeView es macht, und, wenn ich nicht irre, bei dem gings doch. Versuch mal SHGI_ICON gegen SHGFI_SYSICONINDEX zu tauschen. Du brauchst ja nur den Index. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz