Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2007, 11:43   #1
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Вопрос Диалог выбора иконок

А можт кто знает как зделать диалог выбора иконок лежащих внутри Exe или Dll
такой как винда показывает при выборе иконки до нажатия "Обзор".
подробно не обязательно, хотябы направьте на идею.
зарание спасибо.
Разберемся.......
ЧИЖ вне форума Ответить с цитированием
Старый 27.02.2007, 15:28   #2
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
Лампочка

Можно так попробовать:
Есть способы вытягивания иконок из EXE файла, вітягиваешь, сохраняешь как временній файл, отображаешь у себя на форме, по выходу - удаляешь временные файлы...
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Старый 27.02.2007, 21:57   #3
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Вопрос

А как вытянуть иконку на прямую во временный файл?
потому что как вытянуть на форму мне посоветовали, только при сохранении сформы или из переменной типа ticon или tpicture иконка сохраняется в файл сильно искаженной (8 бит цвет и вся лесинкой), хотя на форме отображается нормально.
подскажи как вытаскивать иконку прямо в файл, я тогда на форму буду грузить уже изученным методом а сохранять выбранную отдельной процедурой сразу в файл назначенияю. можт прокатит.
Разберемся.......
ЧИЖ вне форума Ответить с цитированием
Старый 27.02.2007, 22:05   #4
wiskas
Пользователь
 
Аватар для wiskas
 
Регистрация: 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; вроде выводит иконку с нормальным качеством, впринципе можно повыдерать так и перечислить циклом индекс до максимально имеющиеся иконки.
wiskas вне форума Ответить с цитированием
Старый 27.02.2007, 22:53   #5
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Вопрос

ну допустим я уже делал следующим образом

Код:
 
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Picture.Icon.Handle:=extracticon(hinstance,'c:\windows\system32\shell32.dll',i);
i1:=i;
inc(i);
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
image1.picture.icon.savetofile('c:\'+inttostr(i)+'.ico');
end;
проблема не в рисовке на форме а в сохранении на форме выглядит как надо а в файле искаженно.

но я всеже попробую по твоему.
Разберемся.......
ЧИЖ вне форума Ответить с цитированием
Старый 27.02.2007, 23:02   #6
wiskas
Пользователь
 
Аватар для wiskas
 
Регистрация: 21.02.2007
Сообщений: 26
По умолчанию

ну вот смотри, я так понял тебе нада выдрать все иконки с файла, и сохранить их. Если да, то зачем мучатся? Возми выдери иконки как я сказал, и ресуй их не на форму допустим, а в image а потом там есть параметр image1.Picture.SaveToFile и оно сохранит как с таким качеством как и на image1. Помойму должно все получится) если будут проблемы - говори, я попробую у себя сделать быстро прогу такую)
wiskas вне форума Ответить с цитированием
Старый 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
wiskas
Пользователь
 
Аватар для wiskas
 
Регистрация: 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.
wiskas вне форума Ответить с цитированием
Старый 28.02.2007, 12:28   #9
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 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.
Speeker вне форума Ответить с цитированием
Старый 28.02.2007, 13:14   #10
wiskas
Пользователь
 
Аватар для wiskas
 
Регистрация: 21.02.2007
Сообщений: 26
По умолчанию

ыыы офф топ. у него не проблема в сохранение и создании списка иконок. у него вся проблема при сохранении иконка теряет цветность я написал как это мона избежать.
wiskas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диалог выбора папки 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