Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Icon mit bestimmtem Index aus Datei lesen... (https://www.delphipraxis.net/80962-icon-mit-bestimmtem-index-aus-datei-lesen.html)

FriFra 18. Nov 2006 00:08


Icon mit bestimmtem Index aus Datei lesen...
 
Ich benutze die folgende Funktion um Dateiicons in eine in eine Systemimagelist zu laden und anschkießend den Index für die Anzeige in einer Treeview zu bekommen. Ich würde jetzt gern bei einigen Dateien den Iconindex mitgeben, d.h. es soll dann z.B. das 3. Icon geladen werden... wie mache ich das am besten?
Delphi-Quellcode:
function GetShellIcon(FileName: string; NoFile: boolean): integer;
var
  SHFileInfo: TSHFileInfo;
  Tmp: string;
  Txt: textfile;
begin
  Result := 0;
  //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 + '\';

  // CoInitialize has to be called before SHGetFileInfo (done by Delphi)
  FillChar(SHFileInfo, SizeOf(TSHFileInfo), 0);

  //Dateiino lesen...
  if NoFile = False then
    ShGetFileInfo(PChar(FileName), 0, SHFileInfo, SizeOf(TSHFileInfo),
      SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON)
  else
    ShGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_ARCHIVE, SHFileInfo,
      SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
      SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);

  try
    //IconIndex liefern...
    Result := SHFileInfo.iIcon;
  finally
    // icon handle freigeben
    DestroyIcon(SHFileInfo.hIcon);
  end;
end;

Zacherl 18. Nov 2006 14:54

Re: Icon mit bestimmtem Index aus Datei lesen...
 
Guck dir mal ExtractIcon aus der ShellAPI Unit an.

Florian

FriFra 18. Nov 2006 17:17

Re: Icon mit bestimmtem Index aus Datei lesen...
 
Naja... das hilft mir in dem Fall nicht wirklich weiter, da ich das Icon in der ShellIcon-Liste haben muss..
Ich hab mir jetzt geholfen, indem ich einfach temporär (im Tempordner) eine Verknüpfung anlege und diese dann an "GetShellIcon" übergebe. Anschließend lösche ich meine Temporäre Datei wieder ;) ... So habe ich auf jeden Fall das richtige Symbol in der Liste :spin2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz