AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SHGetFileInfo richtig anwenden

Ein Thema von DieDolly · begonnen am 27. Mär 2020 · letzter Beitrag vom 27. Mär 2020
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

SHGetFileInfo richtig anwenden

  Alt 27. Mär 2020, 14:06
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.
SystemIcons := SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);

Im GetImageIndex Event lade ich Icons einmalig
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?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: SHGetFileInfo richtig anwenden

  Alt 27. Mär 2020, 14:14
https://docs.microsoft.com/en-us/win...shgetfileinfow
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: SHGetFileInfo richtig anwenden

  Alt 27. Mär 2020, 14:21
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 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);

Geändert von DieDolly (27. Mär 2020 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Alt 28. Mär 2020, 02:08     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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