Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit Shellicons... (https://www.delphipraxis.net/5793-problem-mit-shellicons.html)

Christian Seehase 20. Jun 2003 22:27

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.

FriFra 20. Jun 2003 23:28

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;

Christian Seehase 21. Jun 2003 00:01

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.

Christian Seehase 18. Jul 2003 16:36

Re: Problem mit Shellicons...
 
Moin FriFra,

jetzt hab' ich das mal gemacht:

Delphi-Quellcode:
// 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;
Bei mir funzt es, aber das tat's ja auch schon vorher ;-)

Ich weiss etwas spät :oops:

FriFra 18. Jul 2003 17:26

Re: Problem mit Shellicons...
 
Leider funktioniert auch dieser Code nicht:
http://www.frifra.de/Temp/iconindex.JPG

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;

Christian Seehase 18. Jul 2003 19:04

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.
Seite 4 von 4   « Erste     234   

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