Процесс получения иконок из .EXE, .DLL или .ICO файлов полностью идентичен.
Различие только в том, что в .ICO файле может храниться только одна иконка, а в
.EXE и .DLL несколько. Для получения иконок из файлов, в модуле ShellAPI, есть
функция:
function ExtractIcon(Inst: THandle; FileName: PChar; IconIndex: Word): HIcon;
|
где
- Inst
- указатель на приложение вызвавшее функцию,
- FileName
- имя файла из которого необходимо получить иконку,
- IconIndex
- номер необходимой иконки.
Если функция возвращает значение не равное нулю, то в файле есть следующая
иконка.
В данном примере в компонент Image1 выводится иконка запущенного файла.
uses ShellAPI; ... procedure TForm1.FormCreate(Sender: TObject); var A: array [0..78] of Char; begin {Получение имени запущенного файла} StrPCopy(A, ParamStr(0)); {Вывод на экран нулевой иконки из файла} Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0); end;
|
Если вы хотите создать некий браузер по иконкам, то можете воспользоваться
компонентами с закладки Win3.1. Вынесите на форму компонент TFileListBox; затем
TDirectoryListBox, в свойстве FileList укажите на список файлов [TFileListBox];
после этого возьмите компонент класса TDriveComboBox, указав в его свойстве
DirList на список каталогов [TDirectoryListBox], ну, и, наконец, ставьте
TFilterComboBox, который позволит в списке файлов отображать только те файлы,
которые соответствуют маске, указанной в свойстве Filter. Здесь в качестве
значения укажите следующее: ico|*.ico|dll|*.dll|exe|*.exe|all|*.ico; *.dll;
*.exe ..а в свойстве FileList задайте список файлов [TFileListBox]. В
обработчике OnClick компонента TFileListBox напишите такой код:
var A: array [0..78] of Char; begin {Получение имени файла, указанного в списке файлов} StrPCopy(A, FileListBox1.FileName); {Вывод на экран нулевой иконки из файла} Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0);
|
|