Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое изменение TIcon 
:(
    Опции темы
Рубик
Дата 2.8.2011, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.12.2009

Репутация: нет
Всего: нет



Здравствуйте. Нужно рисовать индикатор на TIcon динамически и присваивать его значение TrayIcon.Icon.

Проблема в том, что у TIcon отсутствует Canvas, и рисовать на нем нельзя. Фон для TIcon хранится в TImageList.
Я делаю так: получаю ImageList.GetBitmap, затем на этом TBitmap рисую что нужно, делаю ImageList.Insert и затем ImageList.GetIcon, где и получаю иконку. Но при этом почему-то теряется прозрачность (иконка изначально 32-битная).
У ImageList стоит ColorDepth = cd32Bit.

Вопрос в том, как корректно нарисовать на 32-битной иконке (TIcon), получаемой из ImageList что-нибудь, например, прямоугольник.

Delphi 2010, Win 7

Это сообщение отредактировал(а) Рубик - 2.8.2011, 11:59
PM MAIL   Вверх
CodeMonkey
Дата 2.8.2011, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



На иконке рисовать нельзя. Рисовать надо на Bitmap. Прозрачность задаётся двумя способами - по маске, либо по контрольному цвету.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Рубик
Дата 2.8.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.12.2009

Репутация: нет
Всего: нет



Цитата(CodeMonkey @ 2.8.2011,  15:39)
На иконке рисовать нельзя. Рисовать надо на Bitmap. Прозрачность задаётся двумя способами - по маске, либо по контрольному цвету.

Для 32-битных иконок прозрачность задается иначе (4-ым байтом), насколько я понимаю.
PM MAIL   Вверх
ZBugz
Дата 10.8.2011, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



А если заменить Ticon на Timage ?

Добавлено через 59 секунд
И еще попробывать поставить TrayIcon.Icon.Transparent:=True;

PM MAIL   Вверх
Чучмек
Дата 12.8.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Код

var
bmMask,bmColor:tbitmap;
ico:ticon;
icoinfo:ticoninfo;
NID:TNotifyIconData;

begin
bmMask:=tbitmap.Create;
bmColor:=tbitmap.Create;
ico:=ticon.Create;

bmMask.Height:=32;
bmMask.Width:=32;
bmMask.Monochrome:=true;
 bmMask.Canvas.LineTo(32,32);

bmColor.Height:=32;
bmColor.Width:=32;
 bmColor.Canvas.Pen.Color := clRed;
 bmColor.Canvas.LineTo(32,32);

icoinfo.fIcon:=true;
icoinfo.xHotspot:=0;
icoinfo.yHotspot:=0;
icoinfo.hbmMask:=bmMask.Handle;
icoinfo.hbmColor:=bmColor.Handle;

ico.Handle:=CreateIconIndirect(icoinfo);

NID.cbSize:=sizeof(NID);
NID.Wnd:=form1.Handle;
NID.uFlags:=NIF_ICON;
NID.hIcon:=ico.Handle;
Shell_NotifyIcon( NIM_ADD,@NID);

Дальше сам разберешься


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.