diff --git a/lcl/interfaces/win32/win32wsshellctrls.pp b/lcl/interfaces/win32/win32wsshellctrls.pp index 5752e16107..caedd49bee 100644 --- a/lcl/interfaces/win32/win32wsshellctrls.pp +++ b/lcl/interfaces/win32/win32wsshellctrls.pp @@ -21,7 +21,7 @@ unit win32wsshellctrls; interface uses - Classes, ComCtrls, ShelLCtrls, Types, + SysUtils, Classes, ComCtrls, ShellCtrls, Types, //////////////////////////////////////////////////// // To get as little as posible circles, // uncomment only when needed for registration @@ -60,9 +60,11 @@ function GetShellIcon(const AFileName: WideString): TIcon; var FileInfo: TSHFileInfoW; imgHandle: DWORD_PTR; + attr: LongInt; begin - imgHandle := SHGetFileInfoW(PWideChar(AFileName), 0, FileInfo, SizeOf(FileInfo), - SHGFI_ICON + SHGFI_SMALLICON + SHGFI_SYSICONINDEX); + attr := FileGetAttr(AFileName); + imgHandle := SHGetFileInfoW(PWideChar(AFileName), attr, FileInfo, SizeOf(FileInfo), + SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES); if imgHandle <> 0 then begin Result := TIcon.Create; @@ -120,18 +122,20 @@ var listHandle: HWND; flags: DWord; lvsil: LongInt; + attr: LongInt; begin Result := -1; fullName := WideString(AFileName); + attr := FileGetAttr(fullName); if ALargeImage then begin - flags := SHGFI_LARGEICON or SHGFI_SYSICONINDEX; + flags := SHGFI_LARGEICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES; lvsil := LVSIL_NORMAL; end else begin - flags := SHGFI_SMALLICON or SHGFI_SYSICONINDEX; + flags := SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES; lvsil := LVSIL_SMALL; end; - sysImageHandle := SHGetFileInfoW(PWideChar(fullName), 0, info, SizeOf(info), flags); + sysImageHandle := SHGetFileInfoW(PWideChar(fullName), attr, info, SizeOf(info), flags); if sysImageHandle = 0 then Exit; listHandle := AListView.Handle;