Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 011

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Как можно выдрать иконку из любого файла??? Например, txt или exe?

funtom Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: funtom (статус: Посетитель)
Вопрос отправлен: 19 октября 2008, 17:57
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Аксион

Здравствуйте, funtom!
Ну вопервых txt файл это только текст...ни каких иконок он не содержет, содержат иконки только exe файлы (и dll) Что касается иконки из exe то нашёл такой пример.
В uses надо добавить ShellAPI

var
Icon: TIcon;
FileInfo: SHFILEINFO;
Begin
Icon := TIcon.Create;
Try
SHGetFileInfo(PChar('C:\Test.exe'), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
Icon.Handle := FileInfo.hIcon;
Icon.SaveToFile('c:\Icon.ico');
Finally
Icon.Free;
End;
End;
//C:\Test.exe - путь к ехе
c:\Icon.ico - место сохранения иконки
К сожалению извлекается 16 битная иконка...
Динамически изменить иконку можно так: application.Icon.LoadFromFile('путь\название.ico');

Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 19 октября 2008, 18:28
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 20 октября 2008, 17:50; участников в обсуждении: 4.
Dron

Dron (статус: Студент), 19 октября 2008, 18:06 [#1]:

Снимите розовые очки, в txt-файлах иконки не хранятся :-)
С уважением.
Аксион

Аксион (статус: 4-ый класс), 19 октября 2008, 18:09 [#2]:

Ну вопервых txt файл это только текст...ни каких иконок он не содержет, а выдрать надо средствами delphi?
funtom

funtom (статус: Посетитель), 19 октября 2008, 18:10 [#3]:

Ясно. Тогда как заменить иконку программы на чужую???
Аксион

Аксион (статус: 4-ый класс), 19 октября 2008, 18:12 [#4]:

Иконку своего приложения? Project-Options-Application поле Icon
funtom

funtom (статус: Посетитель), 19 октября 2008, 18:20 [#5]:

Я имел ввиду динамически как-нибудь можно???
Аксион

Аксион (статус: 4-ый класс), 19 октября 2008, 18:21 [#6]:

application.Icon.LoadFromFile('путь\название.ico');
funtom

funtom (статус: Посетитель), 19 октября 2008, 18:25 [#7]:

А с помощью extracticon как выдрать???? А то я разобраться с синтаксисом не могу.
Аксион

Аксион (статус: 4-ый класс), 19 октября 2008, 18:34 [#8]:

var
ic: TIcon;
i, count: integer;
w: integer;
begin
if OpenDialog1.Execute = false then
Exit;
Form1.Canvas.FillRect(Form1.Canvas.ClipRect);
count := ExtractIcon(Application.Handle,
PChar(OpenDialog1.FileName), 0);
ic := TIcon.Create;
w := Form1.Width div 32;
for i := 0 to count - 1 do
begin
ic.Handle := ExtractIcon(Application.Handle,
PChar(OpenDialog1.FileName), i);
Form1.Canvas.Draw(32 * (i mod w), 32 * (i div w), ic);
end;
ic.Destroy;
Вот ещё пример....
funtom

funtom (статус: Посетитель), 20 октября 2008, 15:44 [#9]:

Вопрос углубился. Выдрал иконки из .dll,а они не точно такие же как у файло с нужным расширением. Т.е. в программе при выдирании отоюбражаются правильно,а в эксплорере нет.
funtom

funtom (статус: Посетитель), 20 октября 2008, 15:57 [#10]:

Немного понятнее: когда отображаю иконку в TImage все нормально, когда сохраняю с помощью SaveToFIle в файл .ico передача картинки не правильная, т.е. полученная картинка отдаленно напоминает исходную картинку.
Вадим К

Вадим К (статус: Академик), 20 октября 2008, 16:12 [#11]:

надо понимать, что в dll/exe/ocx/bpl иконки могут храниться в ресурсах.
А то, что показывает проводник - это просто ассоциированые иконки. Для exe файлов это обычно иконка с номером 0 внутри. для всех остальных - берётся с других файлов.
Также надо понимать, что в файле ico может храниться не одна, а 3-4 иконки разных размеров (16х16, 24х24 ... 128х128). И они могут быть разными.
Когда отрисовывает делфи, то обычно отрисовывается нулевая либо подходящая по размеру. А проводник часть махлюет и может взять большую иконку и уменьшить и так дальше.
Когда происходит сохранение иконки с Image, теряется всё метаинформация. Вот и что там получиться - можно только гадать. А ещё плюс ко всему проводник своего дорисует. А часто у него падает кеш иконок.........
Галочка "подтверждения прочтения" - вселенское зло.
funtom

funtom (статус: Посетитель), 20 октября 2008, 17:05 [#12]:

А как тогда можно грамотно сохранить иконку в .ico файл, чтобы она отображалась в проводнике как и в программе, которая выдирает эту самую иконку???
Вадим К

Вадим К (статус: Академик), 20 октября 2008, 17:43 [#13]:

Да вот в одном с предыдущих постов Блазер писал как отиросовать - а вы берите и сохраняйте вместо отрисовки. вот и всё.
А вот что бы Ваша программа показывала иконки также как и проводник... проще деинсталлировать винду. тогда не будет это проблемы.
Потому что каждая винда (9х/ХР/виста) рисует их по своему, по своему подбирает. А также в проводнике можно выставить 4 различных способа отображения...
Галочка "подтверждения прочтения" - вселенское зло.
funtom

funtom (статус: Посетитель), 20 октября 2008, 17:50 [#14]:

Спасибо, тады не буду больше мучаться

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 29 июня 2017, 17:16
Выполнено за 0.04 сек.
Рейтинг@Mail.ru