Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сохранение icon


Автор: Alex 23.9.2003, 06:24
Как из ресурса вытащить иконку и сохранить ее на диск без потери палитры?

Автор: <Spawn> 23.9.2003, 14:07
наверно нужно юзать CreateIconFromResource. Тогда код будет примерно такой:

Код
procedure TForm1.Button1Click(Sender: TObject);
var
Ico:HICON;
Icon:TIcon;
begin
Ico:=CreateIconFromResource(...);
if Ico<>0 then
try
 Icon:=TIcon.Create;
 Icon.Handle:=Ico;
 Icon.SaveToFile(ExtractFilePath(Application.ExeName)+'Test.ico');
finally
 FreeAndNil(Icon);
end;
end;

Автор: Alex 24.9.2003, 06:29
Если честно, то меня уже клинит. Кто может написать пример сохранения 11 иконки из shell32

Автор: <Spawn> 24.9.2003, 07:24
А тебе обязательно в *.ico?
Там с палитрой явно что то не то. В черно - белом варианте только получилось сохранить. А вот в bmp нормально:

Код
procedure TForm1.Button1Click(Sender: TObject);
var
Ico:HICON;
Image:TImage;
begin
Ico:=ExtractIcon(hInstance, 'shell32.dll', 11);
if Ico<>0 then
try
 Image:=TImage.Create(Self);
 Image.Picture.Bitmap.Width:=32;
 Image.Picture.Bitmap.Height:=32;
 DrawIcon(Image.Picture.Bitmap.Canvas.Handle,0,0,Ico);
 Image.Picture.SaveToFile('Test.bmp');
finally
 FreeAndNil(Image);
end;
end;


Если необходимо использовать и большие и маленькие иконки, то можно использовать ExtractIconEx

Автор: Alex 25.9.2003, 06:20
Нет мне нужно именно в icon

Автор: x77 25.9.2003, 09:40
2 alex-co: боюсь, сие невозможно. поищи её в другом месте где-нить. смотри, простенький код:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Picture.Icon.Handle := ExtractIcon(hInstance, 'shell32.dll', 11);
 Image1.Picture.SaveToFile ('shell32_11.ico');
end;


- получаем бяку. пробовал ставить другие номера - всё нормально. видимо, всё дело в какой-то фигне, живущей в палитре 11-ой иконки. найди её в другом месте или нарисуй, в конце концов smile.gif

Автор: Alex 25.9.2003, 13:43
Что значит невозможно тогда как это делает Restorator и подобные программы

Автор: x77 25.9.2003, 14:07
если один и тот же код возвращает для всех иконок работает нормально, а для одной - корябает палитру, что-то здесь не так. я сильно подозреваю, что дельфийские методы не поддерживают работу с иконками, с палитрой больше 16 цветов. ибо дескриптор палитры у иконок (TIcon.Palette: hPALETTE) всегда равен нулю. т.е., её нет. т.е., вся палитра свыше стандартной при сохранении накрывается.

на данный момент я не знаю, как это можно обойти smile.gif

Автор: Alex 26.9.2003, 06:32
Все это я знаю и понимаю

Автор: Alex 27.9.2003, 05:56
Решение найдено http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=delphi;action=post2

Автор: Всё тот же Anderson 3.9.2004, 09:42
Нет такой страницы. Можешь дать правильную ссылку?

Автор: Alex 3.9.2004, 18:12
Цитата
Нет такой страницы. Можешь дать правильную ссылку?

http://forum.vingrad.ru/index.php?showtopic=21183

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)