Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизКак вставить иконку в трей (туда где часики) ? Найти похожие ветки
← →
Кот Бегемот © (2005-04-14 10:12) [0]Столкнулся со странной особенностью работы 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 ?
← →
XP (2005-04-14 10:26) [1]Не использовать Application.Icon.Handle.
Грузить иконку напрямую LoadIcon, LoadResourceName и пр.
← →
Кот Бегемот © (2005-04-14 10:39) [2]Сам проверял-то перед тем как советовать ???
← →
Digitman © (2005-04-14 11:04) [3]
> Кот Бегемот © (14.04.05 10:39) [2]
> Сам проверял-то перед тем как советовать ?
а что тебя смущает ?
никто не заставляет тебя в кач-ве иконки подставлять Application.Icon.Handle или иконки форм
грузи нужные (в нужном формате) иконки вызовами LoadIcon, LoadResourceName и подставляй их !
← →
Чапаев © (2005-04-14 11:18) [4]Используй не LoadIcon(), a LoadImage(), предварительно прочитав хелп. Если всё же хочецца LoadIcon(), то придётся обратить внимание на порядок иконок...
← →
GuAV © (2005-04-14 11:32) [5]
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:35) [6]Спасибо Чапаеву © (14.04.05 11:18)[4] за дельный совет !!!
Помогло именноLoadImage(HInstance,"PROBE123",IMAGE_ICON, 16, 16, 0);
К сожалению я не нашел где можно указывать порядок иконок при загрузке через LoadIcon(). А загружаемое изображение оказывется зависит от текущей битности цвета на десктопе....
2Digitman © (14.04.05 11:04) [3]
Уважаемый Сергей.
Прошу Вас в дальнейшем обращать внимание на вопрос, а не на комментарии - ведь вопрос то был "можно ли сделать..."
← →
Кот Бегемот © (2005-04-14 11:39) [7]2GuAV © (14.04.05 11:32) [5]
Спасибо :) я слишком долго писал ответ :)))
← →
Digitman © (2005-04-14 11:39) [8]
> Кот Бегемот © (14.04.05 11:35) [6]
> вопрос то был "можно ли сделать..."
да конечно можно !
тут и сомнений нет никаких ..
← →
Кот Бегемот © (2005-04-14 11:44) [9]Ну вот :) что и ожидалось услышать ....
Спасибо всем ответившим - тему можно закрывать.
← →
VMcL © (2005-04-14 12:09) [10]>>Кот Бегемот © (14.04.05 11:35) [6]
Вопроса в заглавном посте два:
1. "Как вставить иконку в трей (туда где часики) ?"
2. "можно ли сделать чтобы в трее отображалось именно 16х16 при нескольких изображениях в одном .ico ?"
← →
Чапаев © (2005-04-14 13:40) [11]> К сожалению я не нашел где можно указывать порядок иконок при загрузке через LoadIcon().
Порядок задаётся при создании иконок. ;-) Насколько я помню, "иконкой по умолчанию" является тот DDB, который идёт последним.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c