![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вставить иконку в трей (туда где часики) ? [D5, D6, D7, Win2k]
Кот Бегемот © (2005-04-14 10:12:00)Столкнулся со странной особенностью работы Shell_NotifyIcon.
При параметрахFTrayIcon.hIcon := Application.Icon.Handle;и наличии вApplication.Iconиконки с несколькими изображениями в трей попадает всегда stretch-еное изображение 32х32 в максимальном цвете для текущей системы - а не более подходящее 16х16 как ожидалось.
Проверял так:
Создал .ico-файл с картинками 16х16, 24х24, 32х32 и с 2-х, 4-х, 8-и, 16-и битным цветом для каждого размера.
Каждый вариант изображения был пронумерован.
Использовал для проверки TRxTrayIcon.
А теперь вопрос - можно ли сделать чтобы в трее отображалось именно 16х16 при нескольких изображениях в одном .ico ?
Чапаев (2005-04-14 13:40:00) [1]> К сожалению я не нашел где можно указывать порядок иконок при загрузке через LoadIcon().
Порядок задаётся при создании иконок. ;-) Насколько я помню, "иконкой по умолчанию" является тот DDB, который идёт последним.
VMcL (2005-04-14 12:09:00) [2]>> Кот Бегемот © (14.04.05 11:35) [6]
Вопроса в заглавном посте два:
1. "Как вставить иконку в трей (туда где часики) ?"
2. "можно ли сделать чтобы в трее отображалось именно 16х16 при нескольких изображениях в одном .ico ?"
Кот Бегемот (2005-04-14 11:44:00) [3]Ну вот :) что и ожидалось услышать ....
Спасибо всем ответившим - тему можно закрывать.
Кот Бегемот (2005-04-14 11:39:00) [4]2GuAV © (14.04.05 11:32) [5]
Спасибо :) я слишком долго писал ответ :)))
Digitman (2005-04-14 11:39:00) [5]
> Кот Бегемот © (14.04.05 11:35) [6]
> вопрос то был "можно ли сделать..."
да конечно можно !
тут и сомнений нет никаких ..
Кот Бегемот (2005-04-14 11:35:00) [6]Спасибо Чапаеву © (14.04.05 11:18)[4] за дельный совет !!!
Помогло именноLoadImage(HInstance,'PROBE123',IMAGE_ICON, 16, 16, 0);
К сожалению я не нашел где можно указывать порядок иконок при загрузке через LoadIcon(). А загружаемое изображение оказывется зависит от текущей битности цвета на десктопе....
2Digitman © (14.04.05 11:04) [3]
Уважаемый Сергей.
Прошу Вас в дальнейшем обращать внимание на вопрос, а не на комментарии - ведь вопрос то был "можно ли сделать..."
GuAV (2005-04-14 11:32:00) [7]
procedure SetIcon(hWnd: HWND; Create: Boolean);
const Msg: array[Boolean] of DWORD = (NIM_DELETE, NIM_ADD);
var Icon: TNotifyIconData;
begin
if Create then
begin
Icon.hIcon := LoadImage(hInstance, 'MAINICON',
IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
Icon.uCallbackMessage := WM_MYTRAY;
Icon.uFlags := NIF_MESSAGE or NIF_ICON;
end
else Icon.uFlags := 0;
Icon.uID := 0;
Icon.cbSize := SizeOf(Icon);
Icon.Wnd := hWnd;
Shell_NotifyIcon(Msg[Create], @Icon);
end;
Чапаев (2005-04-14 11:18:00) [8]Используй не LoadIcon(), a LoadImage(), предварительно прочитав хелп. Если всё же хочецца LoadIcon(), то придётся обратить внимание на порядок иконок...
Digitman (2005-04-14 11:04:00) [9]
> Кот Бегемот © (14.04.05 10:39) [2]
> Сам проверял-то перед тем как советовать ?
а что тебя смущает ?
никто не заставляет тебя в кач-ве иконки подставлять Application.Icon.Handle или иконки форм
грузи нужные (в нужном формате) иконки вызовами LoadIcon, LoadResourceName и подставляй их !
Кот Бегемот (2005-04-14 10:39:00) [10]Сам проверял-то перед тем как советовать ???
XP (2005-04-14 10:26:00) [11]Не использовать Application.Icon.Handle.
Грузить иконку напрямую LoadIcon, LoadResourceName и пр.