Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизМигание в System Tray Найти похожие ветки
← →
AloneAli (2004-03-02 15:23) [0]Как заставить мигать иконку программы в System Tray?
← →
Asdor © (2004-03-02 16:13) [1]Взять две иконки и менять их через 0.5 сек...
← →
AloneAli (2004-03-03 06:36) [2]А по другому нельзя? О том, что ты предложил и сделал, но думал может есть другой способ, более элегантнее...
← →
Vlad25 © (2004-03-03 21:01) [3]Можешь использовать LMD TrayIcon (LMD Components), но там как раз реализуется "неэлегантный" способ. Видимо, больше это никак не сделать.
← →
Klev (2004-03-04 16:20) [4]Лучшим советом всегда является наглядный пример:
(На работоспособность не проверялось, но в теории должно работать.)
Удаление иконки.
handle - hwnd окна
n - число - индетификатор TrIc
TrayIcon - переменная, которая = true если иконка существует, и соответственно false, если Explorer перезагрузился (глюки, итп) и иконки более нет в трее. (Что-то типа AVPmon)
const
WM_MYTRAYNOTIFY = WM_USER + 123; - индетификатор сообщения, посылаемого окну, при проишествии всякой всячины с иконкой в трее (щелчок мышью, итп) - обработку этого сообщение надо реализовать в оконной процедуре.
var
TrayIcon, i:bool;
hicon1,hicon2:Dword;
первым делом подгружаем иконки:
hIcon1 := loadicon(hInstance,makeintresource(3)); //твоя иконка взята из ресурсов, ее ид=3 -первоначальная иконка
hIcon2 := loadicon(hInstance,makeintresource(4)); //твоя иконка взята из ресурсов, ее ид=4 -иконка, на которую будет изменяться первоначальная иконка через 0.5 сек.
nidata -TNotifyIconData - структура, описание которой приведено в MSDN.
procedure DeleteTrayIcon(n: integer);
var
nidata: TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Handle;
uID := n;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
TrayIcon:=false;
end;
Создание иконки.
procedure CreateTrayIcon(n: integer);
var
nidata: TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Handle;
uID := n;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYTRAYNOTIFY;
hIcon := hicon1; //твоя иконка взята из ресурсов, ее ид=3 -первоначальная иконка
szTip := "My icon"; //не более 60 символов
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
TrayIcon:=true; //- иконка создана
end;
процедура модификации иконки, ее надо повесить на таймер.
procedure ModTrayIcon(n: integer;ho,mi,se:word);
var
nidata: TNotifyIconData;
s:string;
r:word;
begin
if trayicon=false then exit;
s:= pchar("My Tricon");
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Handle;
uID := n;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYTRAYNOTIFY;
if i=false then begin
hIcon := hicon2;//меняем на новую иконку
i:=true;
end else begin
hIcon := hicon1;//меняем на первоначальную иконку
end;
szTip[r]:=Pchar("My icon");
end;
if not Shell_NotifyIcon(NIM_MODIFY, @nidata) then begin
//если по к-л причинам нашей иконки больше нет, то воссоздаем ее
deletetrayicon(1);
createtrayicon(1);
end;
end;
Это кажется все, что надо. Возможно что-то забыл. Хотя вышеприведенного материала должно хватить даже для написания туториала по этому вопросу.
← →
AloneAli (2004-03-05 07:02) [5]
> Klev (04.03.04 16:20) [4]
> hIcon1 := loadicon(hInstance,makeintresource(3)); //твоя
> иконка взята из ресурсов, ее ид=3 -первоначальная иконка
Хотя я уже сделал мигание в SystmeTray"е, у меня единственный вопрос, как засунуть иконку в ресурсы?
← →
Gero © (2004-03-05 08:59) [6]> как засунуть иконку в ресурсы
Image Editor или brcc32.exe
← →
AloneAli (2004-03-05 10:27) [7]Спасибо!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c