Treumer |
Отправлено: 12.02.2004, 16:30 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Задача — "добраться" до иконки в ресурсе своей же программы.
Как я пытался это делать:
Занес иконку в .res файл (Проект/Ресурсы)
Присвоил ей уникальное имя.
В программе делал следующее:
m_ProgramImages= new TImageList(Owner);
if (m_ProgramImages->ResourceLoad(rtIcon, "IRICON32", clWhite ))
{
...
}
Но увы, m_ProgramImages->ResourceLoad всегда давала false.
Тогда я попробовал так:
TResourceStream* Res = new TResourceStream((int)HInstance, "IRICON32",RT_ICON);
Теперь она ругается, что ресурс не найден.
Иконку я потом удалил и вставил заново при помощи редактора ресурсов, т.к. Борландовская фигулина для внесения данных в ресурсы работает как-то странно.
Но это не помогло.
Пробовал иконки разных размеров 64, 32 и 16 бит...
Как же это сделать ?!
Заранее благодарен за ответы!
|
|
Pirs |
Отправлено: 13.02.2004, 11:54 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
Я не знаю как с ресурсами, но есть более простой способ управления иконками.
1. Бросаешь на форму TImageList. Называешь напр. IconList
2. Сразу устанавливаешь размеры, так как потом будет поздно.Напр.32х32
3. Дважды на ней щелкаешь-открывается редактор. Добавляешь туда битмапы и иконки.Запоминаешь индексы под которыми они разместились
4. А дальше все просто: если надо поменять на какой-то форме иконку пишешь код:
IconList->GetIcon( IndexInIconList , TForm->Icon) ;
Если напр. нужная иконка под индексом 3, и ее надо поместить в главной форме, то просто:
IconList->GetIcon( 3 , Icon) ;
100% работает
|
|
Treumer |
Отправлено: 13.02.2004, 14:19 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
QUOTE (Pirs @ 13/02/2004, 12:56) | Я не знаю как с ресурсами, но есть более простой способ управления иконками.
1. Бросаешь на форму TImageList. Называешь напр. IconList
2. Сразу устанавливаешь размеры, так как потом будет поздно.Напр.32х32
3. Дважды на ней щелкаешь-открывается редактор. Добавляешь туда битмапы и иконки.Запоминаешь индексы под которыми они разместились
4. А дальше все просто: если надо поменять на какой-то форме иконку пишешь код:
IconList->GetIcon( IndexInIconList , TForm->Icon) ;
Если напр. нужная иконка под индексом 3, и ее надо поместить в главной форме, то просто:
IconList->GetIcon( 3 , Icon) ;
100% работает |
Огромное спасибо!
Я не знал что ImageList может и иконки содержать!
Но если кто про ресурсы ответит — было бы еще лучше! |
|
Admin |
Отправлено: 15.02.2004, 11:29 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
QUOTE | Но если кто про ресурсы ответит — было бы еще лучше! |
HICON LoadIcon(
HINSTANCE hInstance, // handle of application instance
LPCTSTR lpIconName // icon-name string or icon resource identifier
);
http://www.rxlib.ru/faqs/faqd_en/17767.html
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HICON h;
h = LoadIcon(NULL, IDI_ASTERISK);
Application->Icon->Handle = h;
InvalidateRect(Application->Handle, NULL, true);
}
|
или для иконки из ресурса "IRICON32":
CODE |
void __fastcall TForm1::Button2Click(TObject *Sender)
{
HICON h;
h = LoadIcon(HInstance, "IRICON32");
Application->Icon->Handle = h;
InvalidateRect(Application->Handle, NULL, true);
} |
CODE |
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
HICON h;
h = LoadIcon(NULL, IDI_ASTERISK); // или LoadIcon(HInstance, "IRICON32");
HDC hDC = GetDC(Form1->Handle);
DrawIcon(hDC, 100,100, h);
ReleaseDC(Form1->Handle, hDC);
}
//---------------------------------------------------------------------------
|
Отредактировано Admin — 15/02/2004, 12:43
|
|
|