Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Мигание иконки в трее  (Прочитано 12239 раз)
0 Пользователей и 1 Гость смотрят эту тему.
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« : 06-11-2009 04:16 » new

Здравствуйте, ситуация такая: нужно заставить иконку в трее мигать.
Нашел, как заставить мигать приложения в панели задач:
Код:
FlashWindow(Application->Handle, false);
FlashWindow(Application->Handle, true);
Ну, соответственно, в таймере прописано
A вот как иконку в трее заставить??
Попробовал написать
Код:
FlashWindow(TrayIcon1->Handle, false);
FlashWindow(TrayIcon1->Handle, true);
Не помогло Жаль
Может, надо как-то перерисовывать..
« Последнее редактирование: 06-11-2009 05:27 от Sel » Записан

Улыбаюсь Ага
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 06-11-2009 04:19 » 

надо так: как обычно задаёшь иконку, так же и задавай, только сообщение NIM_MODIFY , а флаги - без NIF_ICON (то есть без иконки пустой квадратик будет)


Код:
создаёшь иконку (NIM_ADD, NIF_ICON)

....


//надо мигать

for(int i=0;i<7;i++)
{
   if(i%2)
   {
       показываешь иконку (NIM_MODIFY , 0)
   }
   else
   {
       показываешь иконку (NIM_MODIFY , NIF_ICON)
   }
   Sleep(100);
}

 показываешь иконку (NIM_MODIFY , NIF_ICON)

ну и учитывай подвисание приложения на 100*7 мс Улыбаюсь

Либо запускай моргалку в отдельном потоке


Ну а ещё - ничего не мешает показывать не пустой квадратик второй картинкой, а ещё картинку ) Например, синий-красный
« Последнее редактирование: 06-11-2009 04:25 от Алексей1153++ » Записан

alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 06-11-2009 05:07 » 

не понял маленько, получается по мимо моей иконки созданую компанентом TrayIcon, создавать еще одну? Здесь была моя ладья...
Записан

Улыбаюсь Ага
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 06-11-2009 05:57 » 

нет, не так. Иконка в трее, для самого трея понимается как идентификатор, состоящий из хендла окна и номера иконки (любое число). По данному идентификатору приложение имеет доступ к своей иконке - может иконку поменять, удалить, снова показать. Когда иконка уже показана, можно её модифицировать, показав другую картинку (или просто пустое место). Вот это и надо сделать - допустим, по таймеру, раз в секунду - то показать картинку, то пустое место.

Код покажи, я покажу и на примере тогда
Записан

alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 06-11-2009 07:21 » 

ну я вот так сделал:
Код:
....
Timer2->Interval = 1000;
Timer2->Enabled=true;
....
//и в OnTimer
TrayIcon1->IconIndex = 1; //одна картинка
Sleep(300);
TrayIcon1->IconIndex = 0;//другая картинка
и по нажатию на иконку таймер останавливается и восстанавливается искомая иконка
вот так я понял...
Записан

Улыбаюсь Ага
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 06-11-2009 08:25 » 

можно так

Код:
  bool m_bShow;//мембер-флаг для чередования
  bool m_bNeedFlash;//мембер-флаг включения моргания


...OnTimer
{
if(m_bNeedFlash)
{
m_bShow=!m_bShow;
TrayIcon1->IconIndex = (m_bShow?1:0);
}
else
{
if(!m_bShow)
{
m_bShow=true;
TrayIcon1->IconIndex = 1;
}
}
}
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines