
Zitat von
Thebe:
Moin
Ich hab folgenden Code
Delphi-Quellcode:
var
fi: SHFileInfo;
begin
AFile := 'C:\irgendeine.bmp';
SHGetFileInfo(pChar(AFile), 0, fi, SizeOf(fi), SHGFI_ICONLOCATION)
// SHGFI_ICONLOCATION = Retrieve the name of the file that contains the icon representing the file specified by pszPath, as returned by the IExtractIcon::GetIconLocation method of the file's icon handler. Also retrieve the icon index within that file. The name of the file containing the icon is copied to the szDisplayName member of the structure specified by psfi. The icon's index is copied to that structure's iIcon member.
end;
Problem ist nur: szDisplayName beinhaltet nicht wider Erwarten nach der
MSDN den Namen der Datei, wo das Icon abgespeichert is, sondern ist einfach nur leer. Ich habe erst gedacht ich hätte bei der weiteren Weiterverarbeitung nen Fehler beim Typecast gemacht, doch nachhem gesetzten Haltepunkt zeigt Delphi mir auch an das fi.szDisplayName komplett leer ist.
Woran kann sowas liegen ? Bin ich zu blöd nu drei bzw. vier Parameter zu übergeben oder liegt das anner
WinAPI ?
MfG
- Thebe
Naja, ein bischen logisch denken wäre nicht soo schlecht
Delphi-Quellcode:
SHGetFileInfo(pChar(AFile), 0, fi, SizeOf(fi), SHGFI_ICONLOCATION or SHGFI_TYPENAME or SHGFI_DISPLAYNAME);
ShowMessage('Displayname: '+strpas(fi.szDisplayName)+#13+
'Typename: '+strpas(fi.szTypeName)+#13+
'IIcon: '+IntToStr(fi.IIcon));
if fi.hIcon > 0 then
DestroyIcon(fi.hIcon);
Wenn Du im Member DisplayName was drinstehen haben möchtest, dann musst Du das der Funktion auch in den Flags (SHGFI_DISPLAYNAME) mitteilen. Das DestroyIcon sollte man auch nicht vergessen, wenn man im Rahmen von Spielereien mal SHGFI_ICON verwendet...