Получение системной иконки, ассоциированной с файлом в Delphi

Система и файлы   3 Октябрь 2010  Автор статьи: admin 

Функция позволяет получить такую же иконку любой директории или любого файла,
какую вы видите в «проводнике». Размеры — 16 * 16 (по умолчанию) или 32 * 32
(второй параметр — itLarge)

Необходимо добавить модули ComObj, ActiveX, ShellApi, ShlObj.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
type
  TIconType = (itSmall, itLarge);

function GetIcon(const FileName: string;
const IconType: TIconType = itSmall):
  TIcon;
var
  FileInfo: TShFileInfo;
  ImageList: TImageList;
  IT: DWORD;
begin
  IT := SHGFI_SMALLICON;
  Result := TIcon.Create;
  ImageList := TImageList.Create(nil);
  if (IconType = itLarge) then
  begin
    IT := SHGFI_LARGEICON;
    ImageList.Height := 32;
    ImageList.Width := 32;
  end;
  FillChar(FileInfo, Sizeof(FileInfo), #0);
  ImageList.ShareImages := true;
  ImageList.Handle := SHGetFileInfo(
    PChar(FileName),
    SFGAO_SHARE,
    FileInfo,
    sizeof(FileInfo),
    IT or SHGFI_SYSICONINDEX
    );
  ImageList.GetIcon(FileInfo.iIcon, Result);
  ImageList.Free; //Освобождение полученной иконки
end;

Пример использования:

1
2
3
4
procedure TForm1.Button1Click(Sender: TObject)
begin
  Self.Icon := GetIcon('C:\');
end;

В данном примере  мы изменяем иконку нашей программы (Self.Icon) на иконку локального диска C. Исходник совместим со всеми версиями Windows, в том числе и Windows 7.

Научиться программировать

  • на Delphi

  • на Java

  • на C++