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
|
|
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 — Блокнот");
то мигает и трей и капшн! Просто недоумение, почему так?
Отредактировано 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 Иван
этот вариант тоже подходит, поэтому если Вам не жаль — шлите. |
|
AVC |
Отправлено: 22.06.2005, 14:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Если у вы не используете формы, управляемые из taskbar, то что бы заставить мигать обычную кнопку приложения нужно
pf.hwnd = Application->Handle;
но при этом caption текущей формы мигать не будет. Разные это окна. |
|
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
давайте вариант, может таки добъю эту проблему с Вашей помощью.
Отредактировано 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 текущей формы мигать не будет. Разные это окна. |
2 AVC
так действительно мигает, НО ПОЧЕМУ?
где прочитать о той РАЗНИЦЕ между окнами, которую Вы имеете в виду? Почему у них разные хэндлы?
Отредактировано 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 (где то здесь я её уже цеплял).
|
|
don_Alehandro |
Отправлено: 22.06.2005, 16:12 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
2 AVC
Огромное спасибо, проблема решена с Вашей помощью, а пример мигания в систрее приберегу для следующего проекта. Удачи.
И вам того же (avc)
Отредактировано AVC — 22/06/2005, 15:16 |
|