Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.034 c
11-1065766982
Deimos
2003-10-10 10:23
2004.05.02
Где найти пример модуля для работы с JPEG


14-1081249300
Rule
2004-04-06 15:01
2004.05.02
Как вы относитесь к ценам на буржуйские компоненты


14-1081401047
syte_ser78
2004-04-08 09:10
2004.05.02
чистка лсд экранчиков


3-1081313965
F. Evgeney
2004-04-07 08:59
2004.05.02
Поддержка транзакций


1-1081770981
TButton
2004-04-12 15:56
2004.05.02
SetLength





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский