|
Вопрос # 2 011/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Как можно выдрать иконку из любого файла??? Например, txt или exe?
 |
Вопрос задал: 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 (статус: Студент), 19 октября 2008, 18:06 [#1]:
Снимите розовые очки, в txt-файлах иконки не хранятся
С уважением.
|
|
Аксион (статус: 4-ый класс), 19 октября 2008, 18:09 [#2]:
Ну вопервых txt файл это только текст...ни каких иконок он не содержет, а выдрать надо средствами delphi?
|
|
funtom (статус: Посетитель), 19 октября 2008, 18:10 [#3]:
Ясно. Тогда как заменить иконку программы на чужую???
|
|
Аксион (статус: 4-ый класс), 19 октября 2008, 18:12 [#4]:
Иконку своего приложения? Project-Options-Application поле Icon
|
|
funtom (статус: Посетитель), 19 октября 2008, 18:20 [#5]:
Я имел ввиду динамически как-нибудь можно???
|
|
Аксион (статус: 4-ый класс), 19 октября 2008, 18:21 [#6]:
application.Icon.LoadFromFile('путь\название.ico');
|
|
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 (статус: Посетитель), 20 октября 2008, 15:44 [#9]:
Вопрос углубился. Выдрал иконки из .dll,а они не точно такие же как у файло с нужным расширением. Т.е. в программе при выдирании отоюбражаются правильно,а в эксплорере нет.
|
|
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 (статус: Посетитель), 20 октября 2008, 17:05 [#12]:
А как тогда можно грамотно сохранить иконку в .ico файл, чтобы она отображалась в проводнике как и в программе, которая выдирает эту самую иконку???
|
|
Вадим К (статус: Академик), 20 октября 2008, 17:43 [#13]:
Да вот в одном с предыдущих постов Блазер писал как отиросовать - а вы берите и сохраняйте вместо отрисовки. вот и всё.
А вот что бы Ваша программа показывала иконки также как и проводник... проще деинсталлировать винду. тогда не будет это проблемы.
Потому что каждая винда (9х/ХР/виста) рисует их по своему, по своему подбирает. А также в проводнике можно выставить 4 различных способа отображения...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
funtom (статус: Посетитель), 20 октября 2008, 17:50 [#14]:
Спасибо, тады не буду больше мучаться
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|