Страница 1 из 2
Диалог выбора иконок
Добавлено: 25 фев 2007, 23:01
ЧИЖ
А можт кто знает как зделать диалог выбора иконок лежащих внутри Exe или Dll
такой как винда показывает при выборе иконки до нажатия "Обзор".
подробно не обязательно, хотябы направьте на идею.
зарание спасибо.
Re: Диалог выбора иконок
Добавлено: 26 фев 2007, 12:26
namomelkor
ищи инфу по РЕ-файлам.
когда-то такое писал.
если сильно надо могу вспомнить на досуге )
Re: Диалог выбора иконок
Добавлено: 26 фев 2007, 13:33
LAngel
обычный listView, из перечисляй ресурсы, дергай иконки, пихай в imageList и создавай итемы

Re: Диалог выбора иконок
Добавлено: 26 фев 2007, 14:32
ЧИЖ
Спасибо ща попробую
Re: Диалог выбора иконок
Добавлено: 26 фев 2007, 18:55
ЧИЖ
C интерфейсной частью разобрался (попробовал imagelist и т д) получилось но вот с загрузкой иконок из DLL и EXE ни как. почитал учебники там только про загрузку иполняемого кода, форм, и строковых констант(языка), а про загрузку ресурсов типа картинок звуков и т д ни чего. Как загрузить иконки не из файла а например из
shell32.dll
Re: Диалог выбора иконок
Добавлено: 27 фев 2007, 11:55
namomelkor
Ищи литературу по РЕ файлам !!!!
Re: Диалог выбора иконок
Добавлено: 27 фев 2007, 12:07
namomelkor
Процесс получения иконок из .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);
Re: Диалог выбора иконок
Добавлено: 27 фев 2007, 13:27
ЧИЖ
Попробовал - browser по иконкам получился, работает круто!
Только когда по нажатию кнопки, ну скажем "ОК" иконка сохраняется в файл у нее с качеством кайфолом какойто (вся полу серая и в каёмочке) а на форме нормально отображается, можт ище че надо дописать???????

Re: Диалог выбора иконок
Добавлено: 27 фев 2007, 13:36
namomelkor
а как сохраняешь?
Re: Диалог выбора иконок
Добавлено: 27 фев 2007, 15:55
ЧИЖ
вопервых загружаю:
ic:ticon;
ic:=ticon.Create;
ic.Handle:=extracticon(hinstance,'имя.exe',i);
далее идет отображение и выбор
и по нажатию кнопки
ic.SaveToFile('имя.ico');
получается следующее:
0.ico иконка вынутая прогой
1.ico икотка вынутая RESTORATORом
иконки приложены в архиве