Листинг 4.35.
Определение значка файла
function GetFileIcon(filename: String; small: Boolean = False ): HICON;
var
info: SHFILEINFO;
flags: Cardinal;
begin
flags := SHGFI_ICON;
if small then
//Получение малого значка
flags := flags or SHGFI_SMALLICON
else
//Получение большого значка
flags := flags or SHGFI_LARGEICON;
ZeroMemory(Addr(info), SizeOf(info));
//Получение значка
SHGetFileInfo(PAnsiChar(filename), 0, info, SizeOf(info), flags);
GetFileIcon := info.hIcon;
end;
Используемая в листинге 4.35 API-функция SHGetFilelnfo объявлена в модуле ShellApi. Там же объявлена структура SHFILEINFO.
В листинге 4.36 приведен пример использования функции GetFilelcon: здесь полученные значки сохраняются в элементах управления Image (по одному для большого и малого значков).
Листинг 4.36.
Пример получения значка заданного файла (или папки)
procedure TForm1.cmbLoadIconClick(Sender: TObject);
begin
//Определение большого и малого значков файла
imgLarge.Picture.Icon.Handle := GetFileIcon(txtFile.Text);
imgSmall.Picture.Icon.Handle := GetFileIcon(txtFile.Text, True);
end;
Пример определения значка файла приводится на рис. 4.10.
Рис. 4.10. Определение значка, ассоциированного с файлом