Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   SHGetFileInfo richtig anwenden (https://www.delphipraxis.net/203813-shgetfileinfo-richtig-anwenden.html)

DieDolly 27. Mär 2020 13:06

SHGetFileInfo richtig anwenden
 
Ich habe gerade eine Stelle im Code wiedergefunden, die ich lange nicht beachtet habe.
Damit eine VirtualStringTree für ihre Dateieinträge die richtigen Icons angezeigt bekommt, verwende ich SHGetFileInfo im FormCreate und füge das dann einer TImageList (Handle) mit SmallImages auf True an.
Delphi-Quellcode:
SystemIcons := SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);


Im GetImageIndex Event lade ich Icons einmalig
Delphi-Quellcode:
SHGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_TYPENAME);


Icons für Dateien werden anzeigt. Für Verzeichnisse aber nicht.
Wie wendet man SHGetFileInfo richtig und performant an?

venice2 27. Mär 2020 13:14

AW: SHGetFileInfo richtig anwenden
 
https://docs.microsoft.com/en-us/win...shgetfileinfow

DieDolly 27. Mär 2020 13:21

AW: SHGetFileInfo richtig anwenden
 
Delphi-Quellcode:
SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON
ist scheinbar performanter, da weniger Daten abgefragt werden. Icons von Verzeichnissen werden aber nicht angezeigt.

Daran schuld ist scheinbar das
Delphi-Quellcode:
SHGFI_USEFILEATTRIBUTES
. Aber lasse ich das weg, ist die ganze Sache wesentlich langsamer.

Folgendermaßen funktioniert es für Dateien und Verzeichnisse. Die Geschwindigkeit ist relativ OK.
Delphi-Quellcode:
 if IstDatei then
  SHGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON)
 else
  SHGetFileInfo(PChar(FileName), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON);


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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