Диалог выбора иконок

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
ЧИЖ
Сообщения: 29
Зарегистрирован: 24 фев 2007, 23:57
Контактная информация:

А можт кто знает как зделать диалог выбора иконок лежащих внутри Exe или Dll
такой как винда показывает при выборе иконки до нажатия "Обзор".
подробно не обязательно, хотябы направьте на идею.
зарание спасибо.
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

ищи инфу по РЕ-файлам.
когда-то такое писал.
если сильно надо могу вспомнить на досуге )
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

обычный listView, из перечисляй ресурсы, дергай иконки, пихай в imageList и создавай итемы ;)
С уважением, Lost Angel...
Аватара пользователя
ЧИЖ
Сообщения: 29
Зарегистрирован: 24 фев 2007, 23:57
Контактная информация:

Спасибо ща попробую
Аватара пользователя
ЧИЖ
Сообщения: 29
Зарегистрирован: 24 фев 2007, 23:57
Контактная информация:

C интерфейсной частью разобрался (попробовал imagelist и т д) получилось но вот с загрузкой иконок из DLL и EXE ни как. почитал учебники там только про загрузку иполняемого кода, форм, и строковых констант(языка), а про загрузку ресурсов типа картинок звуков и т д ни чего. Как загрузить иконки не из файла а например из
shell32.dll
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

Ищи литературу по РЕ файлам !!!!
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

Процесс получения иконок из .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);
  {Вывод на экран нулевой иконки из файла}
  Imag1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0);
Аватара пользователя
ЧИЖ
Сообщения: 29
Зарегистрирован: 24 фев 2007, 23:57
Контактная информация:

Попробовал - browser по иконкам получился, работает круто!
Только когда по нажатию кнопки, ну скажем "ОК" иконка сохраняется в файл у нее с качеством кайфолом какойто (вся полу серая и в каёмочке) а на форме нормально отображается, можт ище че надо дописать??????? :(
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

а как сохраняешь?
Аватара пользователя
ЧИЖ
Сообщения: 29
Зарегистрирован: 24 фев 2007, 23:57
Контактная информация:

вопервых загружаю:

ic:ticon;

ic:=ticon.Create;
ic.Handle:=extracticon(hinstance,'имя.exe',i);

далее идет отображение и выбор

и по нажатию кнопки

ic.SaveToFile('имя.ico');


получается следующее:
0.ico иконка вынутая прогой
1.ico икотка вынутая RESTORATORом

иконки приложены в архиве
Вложения
ico.zip
(11.12 КБ) 19 скачиваний
Ответить