| 
| 
 | Вопрос # 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]:Спасибо, тады не буду больше мучаться |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |