C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
функция FlashWindowEx, значек в трее не хочет мигать
don_Alehandro
Отправлено: 22.06.2005, 10:38


Ученик-кочегар

Группа: Участник
Сообщений: 16



Уважаемые, подскажите, почему значек в трее отказывается "мигать"?
фрагмент кода:
{
HWND hHandle=FindWindow(NULL,"Мигалка");
FLASHWINFO pf;
pf.cbSize=sizeof(FLASHWINFO);
pf.hwnd=hHandle;
pf.dwFlags=FLASHW_TIMER|FLASHW_ALL;//FLASHW_ALL — обязано мигать и капшн и трей, мигает только капшн
pf.uCount=10; //сколько раз мигаем
pf.dwTimeout=300;//период продолжительности свечения, гашения
FlashWindowEx(&pf);
}
для более подробного рассмотрения посмотрите архив, буду благодарен за любые отклики.

Отредактировано don_Alehandro — 22/06/2005, 11:49

User Attached Image Скачать файл
FlashWindow.zip


AVC
Отправлено: 22.06.2005, 12:17


Ветеран

Группа: Модератор
Сообщений: 1583



Не пробовал эту функцию (мигал сам), но судя по help'у НЕ вижу почему должна мигать иконка в трее.
MSDN
QUOTE

FLASHW_ALL
0x00000003 Flash both the window caption and taskbar button. This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags.

FLASHW_CAPTION
0x00000001 Flash the window caption.

FLASHW_STOP
0 Stop flashing. The system restores the window to its original state.

FLASHW_TIMER
0x00000004 Flash continuously, until the FLASHW_STOP flag is set.

FLASHW_TIMERNOFG
0x0000000C Flash continuously until the window comes to the foreground.

FLASHW_TRAY
0x00000002 Flash the taskbar button.


Отредактировано AVC — 22/06/2005, 12:14
Иван
Отправлено: 22.06.2005, 12:48


Машинист паровоза

Группа: Участник
Сообщений: 207



Я тоже мигал сам, но проект дома, завтра если надо принесу!
don_Alehandro
Отправлено: 22.06.2005, 13:15


Ученик-кочегар

Группа: Участник
Сообщений: 16



AVC, даже если сменить FLASHW_ALL на FLASHW_TRAY, все равно не хочет мигать в трее, но что интересно — если в качестве "подопытного" окна выбрать обычный "Блокнот" -

HWND hHandle=FindWindow(NULL,"1.txt — Блокнот");

то мигает и трей и капшн! Просто недоумение, почему так? wink.gif

Отредактировано don_Alehandro — 22/06/2005, 13:22
don_Alehandro
Отправлено: 22.06.2005, 13:20


Ученик-кочегар

Группа: Участник
Сообщений: 16



Иван, спасибо, если принесете, буду Вам благодарен, пожалуйста на майл w-k@rambler.ru
AVC
Отправлено: 22.06.2005, 13:27


Ветеран

Группа: Модератор
Сообщений: 1583



2don_Alehandro
Мы, наверное, по разному понимаем с вами tray. В спраке MSDN сказано Flash both the window caption and taskbar button. А taskbar это не systray. Для мигания именно в трее я вызывал Shell_NotifyIcon c NIM_MODIFY с разными иконками.
don_Alehandro
Отправлено: 22.06.2005, 13:46


Ученик-кочегар

Группа: Участник
Сообщений: 16



2AVC — да, под tray я понимаю панель задач и значек выполняющегося приложения (taskbar button) на ней. Вы правы эта функция не предназначена для "мигания" иконки в systray. Проблема в том, что мое приложение не мигает на таскбаре, а Блокнот — без проблем, в чем разница, я примерно догадываюсь, но очень не уверен.
Иван
Отправлено: 22.06.2005, 14:40


Машинист паровоза

Группа: Участник
Сообщений: 207



в моем проекте мигает иконка приложения в systray
don_Alehandro
Отправлено: 22.06.2005, 14:46


Ученик-кочегар

Группа: Участник
Сообщений: 16



2 Иван
этот вариант тоже подходит, поэтому если Вам не жаль — шлите. smile.gif
AVC
Отправлено: 22.06.2005, 14:47


Ветеран

Группа: Модератор
Сообщений: 1583



Если у вы не используете формы, управляемые из taskbar, то что бы заставить мигать обычную кнопку приложения нужно
pf.hwnd = Application->Handle;
но при этом caption текущей формы мигать не будет. Разные это окна. smile.gif
AVC
Отправлено: 22.06.2005, 14:51


Ветеран

Группа: Модератор
Сообщений: 1583



Раз вы заинтересовались systray то могу дать свой вариант (элементарный, но сейчас.)
don_Alehandro
Отправлено: 22.06.2005, 15:06


Ученик-кочегар

Группа: Участник
Сообщений: 16



QUOTE (AVC @ 22/06/2005, 14:51)
Раз вы заинтересовались systray то могу дать свой вариант (элементарный, но сейчас.)

2 AVC
давайте вариант, может таки добъю эту проблему с Вашей помощью. smile.gif

Отредактировано don_Alehandro — 22/06/2005, 15:06
don_Alehandro
Отправлено: 22.06.2005, 15:14


Ученик-кочегар

Группа: Участник
Сообщений: 16



QUOTE (AVC @ 22/06/2005, 14:47)
pf.hwnd = Application->Handle;
но при этом caption текущей формы мигать не будет. Разные это окна. smile.gif

2 AVC
так действительно мигает, НО ПОЧЕМУ?sad.gif
где прочитать о той РАЗНИЦЕ между окнами, которую Вы имеете в виду? Почему у них разные хэндлы?

Отредактировано don_Alehandro — 22/06/2005, 15:38
AVC
Отправлено: 22.06.2005, 15:47


Ветеран

Группа: Модератор
Сообщений: 1583



Подмаргивание иконкой
CODE

if (SetForegroundWindow(Application->Handle) == 0)
{  for (int i=0, imax=5; i < imax; i++)
     { TrayMessage(NIM_MODIFY, FIco_Tray_PingOn);
       Sleep(100);
       TrayMessage(NIM_MODIFY, FIco_Tray_Idle );
       if (i < (imax-1)) Sleep(100);
     }
}

//-----------------------------------------------------
bool __fastcall TF_Main::TrayMessage(DWORD dwMessage, TIcon *ico)
{
NOTIFYICONDATA tnd;
AnsiString pszTip = Application->Title;

tnd.cbSize = sizeof(tnd);
tnd.hWnd  = Handle;
tnd.uID = 1001;
tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnd.uCallbackMessage = PingDogWM_NOTIFY;

if (dwMessage == NIM_MODIFY)
{  if (ico) tnd.hIcon = ico->Handle;
   else tnd.hIcon = FPing_IsActive? FIco_Tray_PingOn->Handle : FIco_Tray_Idle->Handle;
   lstrcpyn(tnd.szTip, pszTip.c_str(), sizeof(tnd.szTip));
}
else
{  tnd.hIcon = NULL;
   tnd.szTip[0] = '<!--POST BOX-->';
}

return Shell_NotifyIcon(dwMessage, &tnd);
}


QUOTE

так действительно мигает, НО ПОЧЕМУ?
где прочитать о той РАЗНИЦЕ между окнами

Это на совести Borland'а. Просто воспринимаю как данное.
Где почитать об этой разнице не знаю, но на всякий случай прицеплю статью о представлении форм кнопками в taskbar (где то здесь я её уже цеплял).


User Attached Image Скачать файл
tbardemo.rar


don_Alehandro
Отправлено: 22.06.2005, 16:12


Ученик-кочегар

Группа: Участник
Сообщений: 16



2 AVC
Огромное спасибо, проблема решена с Вашей помощью, а пример мигания в систрее приберегу для следующего проекта. Удачи. smile.gif

И вам того же (avc)

Отредактировано AVC — 22/06/2005, 15:16

Вернуться в Вопросы программирования в C++Builder