Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Extrahieren des ICONs von BELIEBIGEM Dateityp? (https://www.delphipraxis.net/149626-extrahieren-des-icons-von-beliebigem-dateityp.html)

Meflin 25. Mär 2010 17:10

Re: Extrahieren von ICON von BELIEBIGER Datei?
 
Zitat:

Zitat von invalid_operation
Beantrage eine runde 3 wegen der etwas unscharfen Fragestellung ;-)

:warn: Über Noten wird nicht verhandelt :mrgreen:

Deep-Sea 26. Mär 2010 07:29

Re: Extrahieren des ICONs von BELIEBIGEM Dateityp?
 
Delphi-Quellcode:
uses ShellAPI, Math;

function GetFileIcon(AFileName: String; ASmall: Boolean = True; AIndex: Integer = 0): HIcon;
var
  LDummy: HIcon;
  LInfo: TSHFileInfo;
begin
  LDummy := 0;
  If ExtractIconEx(PChar(AFileName), -1, LDummy, LDummy, 0) <> 0 then
  begin
    If ASmall then ExtractIconEx(PChar(AFileName), AIndex, LDummy, Result, 1)
      else ExtractIconEx(PChar(AFileName), AIndex, Result, LDummy, 1);
  end else begin
    SHGetFileInfo(PChar(SysUtils.ExtractFileExt(AFileName)),
      FILE_ATTRIBUTE_NORMAL, LInfo, SizeOf(TSHFileInfo),
        IfThen(ASmall, SHGFI_SMALLICON, SHGFI_LARGEICON) or
          SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
    Result := LInfo.HIcon;
  end;
end;
Die Funktion gibt das Icon-Handle von jeder beliebigen Datei zurück - wenn die Datei keines besitzt, wird eben das Standard-Windows-Icon geholt. Läuft bei mir auf D2009, sollte aber auch auf anderen laufen ...
Wenn ASmall true ist gibt es an, dass kleine Icons geholt werden (16x16), bei false große (32x32). Warum Windows das so komisch macht und man keine Chance hat an evtl. vorhandene andere Größen ran zu kommen weiß ich net :gruebel:

Ich hoffe das läuft und ist das, was du wolltest :wink:

PS: Die Unit Math kann raus, wenn man das "IfThen" umgeht.

stho 26. Mär 2010 09:13

Re: Extrahieren des ICONs von BELIEBIGEM Dateityp?
 
Zitat:

Zitat von Deep-Sea
Delphi-Quellcode:
uses ShellAPI, Math;

function GetFileIcon(AFileName: String; ASmall: Boolean = True; AIndex: Integer = 0): HIcon;
var
  LDummy: HIcon;
  LInfo: TSHFileInfo;
begin
  LDummy := 0;
  If ExtractIconEx(PChar(AFileName), -1, LDummy, LDummy, 0) <> 0 then
  begin
    If ASmall then ExtractIconEx(PChar(AFileName), AIndex, LDummy, Result, 1)
      else ExtractIconEx(PChar(AFileName), AIndex, Result, LDummy, 1);
  end else begin
    SHGetFileInfo(PChar(SysUtils.ExtractFileExt(AFileName)),
      FILE_ATTRIBUTE_NORMAL, LInfo, SizeOf(TSHFileInfo),
        IfThen(ASmall, SHGFI_SMALLICON, SHGFI_LARGEICON) or
          SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
    Result := LInfo.HIcon;
  end;
end;
Die Funktion gibt das Icon-Handle von jeder beliebigen Datei zurück - wenn die Datei keines besitzt, wird eben das Standard-Windows-Icon geholt. Läuft bei mir auf D2009, sollte aber auch auf anderen laufen ...
Wenn ASmall true ist gibt es an, dass kleine Icons geholt werden (16x16), bei false große (32x32). Warum Windows das so komisch macht und man keine Chance hat an evtl. vorhandene andere Größen ran zu kommen weiß ich net :gruebel:

Ich hoffe das läuft und ist das, was du wolltest :wink:

PS: Die Unit Math kann raus, wenn man das "IfThen" umgeht.

ich bedanke mich vielmals für deine hilfe ^^
Ich kann den Code leider erst heute abend ausprobieren. (bin an der arbeit...)
Ich melde mich dann aber wenn ich es damit geschafft habe :-P

:dp:

rollstuhlfahrer 26. Mär 2010 14:37

Re: Extrahieren des ICONs von BELIEBIGEM Dateityp?
 
ich glaub zwar, das das hier im Grunde das gleiche ist: http://www.delphipraxis.net/internal...037769#1037769
Allerdings handelt es sich hierbei um eine TImageList, die man doch recht simpel verwenden kann (wenn so was gefragt wird)

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr.
Seite 2 von 2     12   

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