|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.02.2007, 11:43 | #1 |
Форумчанин
Регистрация: 24.02.2007
Сообщений: 104
|
Диалог выбора иконок
А можт кто знает как зделать диалог выбора иконок лежащих внутри Exe или Dll
такой как винда показывает при выборе иконки до нажатия "Обзор". подробно не обязательно, хотябы направьте на идею. зарание спасибо.
Разберемся.......
|
27.02.2007, 15:28 | #2 |
Форумчанин
Регистрация: 01.12.2006
Сообщений: 241
|
Можно так попробовать:
Есть способы вытягивания иконок из EXE файла, вітягиваешь, сохраняешь как временній файл, отображаешь у себя на форме, по выходу - удаляешь временные файлы...
Програмисты - единственные люди, которым платят за исправления их же ошибок
|
27.02.2007, 21:57 | #3 |
Форумчанин
Регистрация: 24.02.2007
Сообщений: 104
|
А как вытянуть иконку на прямую во временный файл?
потому что как вытянуть на форму мне посоветовали, только при сохранении сформы или из переменной типа ticon или tpicture иконка сохраняется в файл сильно искаженной (8 бит цвет и вся лесинкой), хотя на форме отображается нормально. подскажи как вытаскивать иконку прямо в файл, я тогда на форму буду грузить уже изученным методом а сохранять выбранную отдельной процедурой сразу в файл назначенияю. можт прокатит.
Разберемся.......
|
27.02.2007, 22:05 | #4 |
Пользователь
Регистрация: 21.02.2007
Сообщений: 26
|
uses ShellApi;procedure TForm1.Button1Click(Sender: TObject);varIconIndex: word;h: hIcon;beginIconIndex := 0;h := ExtractAssociatedIcon(hInstance,'C: \windows\calc.EXE', IconINdex);DrawIcon(Form1.Canvas.Ha ndle, 10, 10, h);end; вроде выводит иконку с нормальным качеством, впринципе можно повыдерать так и перечислить циклом индекс до максимально имеющиеся иконки.
|
27.02.2007, 22:53 | #5 |
Форумчанин
Регистрация: 24.02.2007
Сообщений: 104
|
ну допустим я уже делал следующим образом
Код:
но я всеже попробую по твоему.
Разберемся.......
|
27.02.2007, 23:02 | #6 |
Пользователь
Регистрация: 21.02.2007
Сообщений: 26
|
ну вот смотри, я так понял тебе нада выдрать все иконки с файла, и сохранить их. Если да, то зачем мучатся? Возми выдери иконки как я сказал, и ресуй их не на форму допустим, а в image а потом там есть параметр image1.Picture.SaveToFile и оно сохранит как с таким качеством как и на image1. Помойму должно все получится) если будут проблемы - говори, я попробую у себя сделать быстро прогу такую)
|
27.02.2007, 23:19 | #7 |
Форумчанин
Регистрация: 24.02.2007
Сообщений: 104
|
попробовал по твоему на форме выглядит нормально, только я не понял как ее при такой рисовке сохранять.
А через timage у меня и так сделано было в коде же написано, но на timage иконка какая надо и сделать обозреватель всех иконок я тоже не затрудняюсь. проблема в том что при использовании image1.picture.icon.savetofile('имя ') или image1.picture.savetofile('имя') в файле иконка получается искаженная, тоесть искажается при сохранении, поэтому я ищу способы или сохранения(по другому) или задания параметров конечного файла. можт еще какой способ есть, или этот как доработать?
Разберемся.......
|
28.02.2007, 01:48 | #8 |
Пользователь
Регистрация: 21.02.2007
Сообщений: 26
|
сорь конечно если не отредоктировал сообщение последнее а написал новое, короче по прямому оно не сохраняет так как нада. Есть 2 теоретических арианта.
1. занести иконку в image и там попиксельнос считовать рисунок и писать в файл (непроверял) 2. сделай копию графикс.пас(чтоб не запороть делфи и заменил в procedure WriteIcon строки InternalGetDIBSizes(IconInfo.hbmCol or, ColorInfoSize, ColorBitsSize, 16); или InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16); или и там и там, но при замени второй вроде бы выаст море ошибочек) попробуй первую сначала) , замени 16 на нужное отображение цветов, если я не ошибаюсь тут не в битах а вкол-во цветах. например 2401 - это будет всего лишь 2 тысечи цветов. (то же непроверял - спать хочу Я сначало неврубался что ты хотел сказать что за битыи линнии рисут) сделал пример и понял) делфя с иконами туго работает и не может сохранять с нормальным качеством их. Последний раз редактировалось wiskas; 28.02.2007 в 01:54. |
28.02.2007, 12:28 | #9 |
Форумчанин
Регистрация: 01.12.2006
Сообщений: 241
|
Процесс получения иконок из .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);
Програмисты - единственные люди, которым платят за исправления их же ошибок
Последний раз редактировалось Speeker; 28.02.2007 в 12:36. |
28.02.2007, 13:14 | #10 |
Пользователь
Регистрация: 21.02.2007
Сообщений: 26
|
ыыы офф топ. у него не проблема в сохранение и создании списка иконок. у него вся проблема при сохранении иконка теряет цветность я написал как это мона избежать.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Диалог выбора папки | delphin100 | Общие вопросы Delphi | 2 | 01.06.2008 22:43 |
Загрузка иконок файлов | igroman | Общие вопросы Delphi | 4 | 29.05.2008 09:00 |
Подключение БД к программе ч/з диалог выбора | Ветас | Помощь студентам | 1 | 30.03.2008 00:02 |
Программа для рисования иконок | kuzmich | Софт | 9 | 02.06.2007 00:30 |
отображение иконок в DBGrid | Yoger | БД в Delphi | 3 | 04.03.2007 02:33 |