Процесс получения иконок из .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);
|
|