Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Вниз

Сохранение иконки   Найти похожие ветки 

 
Tahion   (2003-01-11 02:38) [0]

Есть файл, который содержит в себе несколько 32bpp иконок (icl, dll, exe). Нужно сохранить из него иконку с номером Х в отдельный ico файл. Как такое делается?

P.S. Желательно, чтоб при сохранении не терялось 32bpp (даже не в ХР) и сохранялись все форматы иконок (т.е. 16*16, 24*24...) которые есь в иконке.


 
Бандерлоги   (2003-01-11 04:17) [1]

ExtractIconEx (ExtractIcon) =>
GetIconInfo => _IconInfo => 2*Bitmap = Bitmap


 
Tahion   (2003-01-11 07:08) [2]

А подробнее можно?


 
Tahion   (2003-01-11 15:52) [3]

Ну, народ, очень надо.


 
Набережных С.   (2003-01-11 18:24) [4]

Icon: TIcon;
Icon.Handle:=LoadIcon
Icon.SaveToFile


 
Бандерлоги   (2003-01-11 22:23) [5]



procedure TMainForm.Button1Click(Sender: TObject);
var
IconIndex: Integer;
AnIconHandle: HICON;
AnIcon: TIcon;
Old: Pointer;
begin
AnIcon := TIcon.Create;
Old := AnIcon; // сомневаюсь чего-то, правильно ли здесь with TOpenDialog.Create(Self) do
try
if Execute then
begin
IconIndex := 0;
repeat
AnIconHandle := ExtractIcon(HInstance,PChar(FileName), IconIndex);
if (AnIconHandle <> 1) and (AnIconHandle <> 0) then
begin
AnIcon.Handle := AnIconHandle;
Canvas.StretchDraw(Bounds(IconIndex*64,0,64,64),AnIcon);
AnIcon.SaveToFile("F:\Documents\" + ExtractFileName(FileName)
+ " Icon#" + IntToStr(IconIndex) + ".ico");
Inc(IconIndex);
end
until (AnIconHandle = 0) or (AnIconHandle = 1);
end;
finally
Free;
AnIcon := Old; // сомневаюсь чего-то, правильно ли здесь
AnIcon.Free;
end;
end;


 
Tahion   (2003-01-11 22:32) [6]

Описание:
function LoadIcon(Instance: THandle; IconName: PChar): HIcon;

Загpужает поименованный pесуpс пиктогpаммы.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит пиктогpамму или 0 для пpедопpеделенной пиктогpаммы.
IconName: Стpока или имя целочисленного идентификатоpа или пpедопpеделенная пиктогpамма, опpеделенная одной из констант idi_.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp пиктогpаммы; 0 - в пpотивном случае. Для получения расширенной информации об ошибке вызовите функцию GetLastError.

idi_:
IDI_APPLICATION - стандартная пиктограмма для приложения
IDI_HAND - "стоп"
IDI_QUESTION - "вопросительный знак"
IDI_EXCLAMATION - "восклицательный знак"
IDI_ASTERISK - "информация"
IDI_WINLOGO - "Лого Windows"


И все! А мне надо иконку из файла, а не стандартную для диалога...


 
Tahion   (2003-01-11 23:31) [7]

Спасибо Бандерлоги, но теперь нужно круче: так чтоб иконки охранялись в том цвете, в котором они есть, и так, чтоб сохранялись все размеры, которые есть в иконке (если их несколько)

Если кто может помочь с переводом из Си в Делфи, то у меня есть пример. Напишите на tahion@ukrpost.net - я вышлю.


 
Бандерлоги   (2003-01-12 13:20) [8]


> так чтоб иконки охранялись в том цвете, в котором они есть


??? Дак и так...


> чтоб сохранялись все размеры, которые есть в иконке (если их
> несколько)


Должно подойти:

procedure TMainForm.Button1Click(Sender: TObject);
var
IconIndex: Integer;
IconLarge: HICON;
IconSmall: HICON;
AnIcon: TIcon;
Old: Pointer;

procedure SaveIcon(H: HICON; FileName: string; Large: boolean = true);
const Prfx: array [False..True] of string = (" Small", " Large");
begin
AnIcon.Handle := H;
Canvas.StretchDraw(Bounds(IconIndex*64,64*Ord(Large),64,64),AnIcon);
AnIcon.SaveToFile("F:\Documents\" + ExtractFileName(FileName) + Prfx[Large] + " Icon#" + IntToStr(IconIndex) + ".ico");
end;

begin
AnIcon := TIcon.Create;
Old := AnIcon;
with TOpenDialog.Create(Self) do
try
if Execute then
begin
IconIndex := 0;
while
ExtractIconEx(PChar(FileName), IconIndex, IconLarge, IconSmall,1) <> 0 do
begin
SaveIcon(IconLarge, FileName);
SaveIcon(IconSmall, FileName, False);
Inc(IconIndex);
end;
end;
finally
Free;
AnIcon := Old;
AnIcon.Free;
end;
end;


 
Tahion   (2003-01-12 22:23) [9]

> так чтоб иконки охранялись в том цвете, в котором они есть


>>??? Дак и так...

У меня из 32bpp извратил в 16-ти цветные


 
Бандерлоги   (2003-01-13 22:50) [10]

Tahion: Лови.


 
Tahion   (2003-01-15 07:51) [11]

Спасибо. Но не совсем то. См ответ в письме


 
Tahion   (2003-01-21 20:33) [12]

Может еще кто-то процедуру знает?


 
Tahion   (2003-01-26 06:07) [13]

Ау



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
14-54231
RIMMER
2003-02-24 23:35
2003.03.17
WinAMP + WinXP + ASUS CDS-500/A ??


6-54128
ZiLot
2003-01-25 10:54
2003.03.17
---|Ветка была без названия|---


1-53997
Barlok
2003-03-06 14:48
2003.03.17
Пожалуста мастера помогите мне в работе со строками.


3-53946
kudatsky
2003-02-26 15:19
2003.03.17
TQuickRep


1-54012
baracuda
2003-03-06 19:03
2003.03.17
Form





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский