![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отрисовать средствами Delphi иконку в трее
Strate © (2009-02-25 12:35:00)Здравствуйте мастера. Вопрос заключается примерно в следующем.
Каким образом можно отрисовать произвольный рисунок в трее? То есть не конкретно созданный заранее,а, например, динамически обновляемый? К примеру - график сетевой активности, проценты копирования в TotalCommander'e итп. Для отображения иконки использую стандартный TTrayIcon (D2007 вроде и выше), в нём не нашёл ни TCanvas, ни чего то похожего. Как выкрутиться? Кто как решал эту задачу?
Strate (2009-02-25 18:50:00) [1]Удалено модератором
Примечание: Повторять не обязательно.
Strate (2009-02-25 17:46:00) [2]Проблема решилась примерно так: TTrayIcon.Icon := FNewIcon;
Anatoly Podgoretsky (2009-02-25 13:50:00) [3]> Strate (25.02.2009 13:34:07) [7]
Для работы с иконкой трея есть всего одна функция Shell_NotifyIcon, ее делается все.
DVM (2009-02-25 13:37:00) [4]
> Что именно?
Зависит от компонента, которым добавляли иконку в область уведомлений. Про стандартный не зна, не пользуюсь. В WinApi надо вызвать Shell_NotifyIcon с флагом NIM_MODIFY
Strate (2009-02-25 13:34:00) [5]Я догадываюсь что надо что-то вызвать для обновления иконки. Что именно?
Anatoly Podgoretsky (2009-02-25 13:22:00) [6]> Strate (25.02.2009 13:20:04) [4]
Не достаточно, и даже более - этто вообще не имеет отношения к трею.
Strate (2009-02-25 13:20:00) [7]Спасибо за код, ещё вопрос появился. Достаточно ли просто вызвать BitmapToIcon(MyBitmap, TTrayIcon.Icon, clNone) чтобы иконка сменилась?
Anatoly Podgoretsky (2009-02-25 13:20:00) [8]> Strate (25.02.2009 12:35:00) [0]
В трее нельзя, но можно в программе, например в буфере.
DVM (2009-02-25 12:55:00) [9]
function BitmapToIcon(const Bitmap: TBitmap;
Icon: TIcon; MaskColor: TColor): Boolean;
{ Render an icon from a 16x16 bitmap. Return false if error.
MaskColor is a color that will be rendered transparently. Use clNone for
no transparency. }
var
BitmapImageList: TImageList;
begin
BitmapImageList := TImageList.CreateSize(16, 16);
try
Result := False;
BitmapImageList.AddMasked(Bitmap, MaskColor);
BitmapImageList.GetIcon(0, Icon);
Result := True;
finally
BitmapImageList.Free;
end;
end;
Strate (2009-02-25 12:45:00) [10]
> Иконку можно и на лету создавать
Вот ) Вопрос в том - как? TIcon не имеет Canvas, как его тогда динамически создать?
DVM (2009-02-25 12:40:00) [11]
> Как выкрутиться? Кто как решал эту задачу?
Меняй иконку и все. Иконку можно и на лету создавать, но чаще всего используют много заранее заготовленных, если это возможно.