![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Evgen_F |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
У меня приложение, которое работает в фоновом режиме, то есть сидит себе в трее и делает что-то, в то время как пользователь работает с другими программами.
В определённый момент это приложение должно выдать сообщение пользователю, что произошло какое-то событие. В этот момент соответственно оно должно перевести фокус на себя и оказаться на виду у пользователя, независимо от того с каким приложением он до этого работал. (Хотя может можно выдать окошко с текстом сообщения на вид пользователю и не активировав само приложение? Незнаю) Так, когда программулина свёрнута в трей, её легко удаётся активировать
Однако возникла проблема с тем, когда программа не свёрнута в трей, а просто висит на рабочем столе не активная (например пользователь попользовался а потом не свернул, а так и оставил как есть и перешёл работать с другим приложением). Мне никак не удаётся в этом случае передать ей фокус (сделать окно приложения активным) и выкинуть на передний план перед пользователю. Пробовал следующие весчи:
Но мне так и не удалось заставить её остаться на виду у пользователя Не подскажет кто нибудь, что делают приведенные мной функции и где про них можно посмотреть? Как вобще передаёюся фокус между приложениями в винде и всегда ли они при этом переходят на передний план?? Подскажите, как лучше сделать-то? |
||||
|
|||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
А вы знаете, что мигание кнопки на панели задач вместо активации и фокусирования формы было введено Microsoft специально для защиты пользователя от программ, которые считают, что уж их-то сообщение пользователь просто обязан прочитать?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Evgen_F |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
Я об этом догадывался.
Но что мне делать-то? Мне это мигание ни к селу, ни к городу. Мне нужно чтоб пользователь видел СООБЩЕНИЕ!! Как быть-то Это сообщение отредактировал(а) Evgen_F - 29.7.2008, 15:34 |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Пользователь увидит мигающую кнопку вашего приложения в трее и поймёт, что вы хотите показать сообщение.
Так и должно быть. Нехорошо воровать фокус у других приложений. Вы поймите, вот вы хотите всенепременно показывать своё сообщение. А конечный пользователь хочет, чтобы ничто его не отвлекало от работы. А как насчёт такого сценария: я выбираю пункт из большого меню с кучей пунктов. Или: я пишу текст, не глядя в монитор. И тут появляется ваше окно. Моё меню пропадает, текст тоже (я пытаюсь ввести его в ваше окно). Ну. Будете вы в аду гореть за такие неприятности или нет? Если же вы хотите сделать что-то вроде фоновых всплывающих сообщений - можно посмотреть в сторону Balloon hints (взял первые попавшиеся ссылки): http://www.swissdelphicenter.ch/torry/showcode.php?id=1164 http://www.delphi.int.ru/articles/8/ http://www.delphikingdom.com/asp/answer.asp?IDAnswer=59132 или поискать готовое решение в виде компонента (кстати, нет ли его у компонента, который вы используете для иконки в трее?). Или же можно показывать форму, но не тырить фокус: http://www.delphimaster.ru/cgi-bin/forum.p...p;id=1213084981 http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=26130 http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=23604 http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=56717 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Evgen_F |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
Я всё же не соглашусь с вами, несмотртя даже на весомые приведённые примеры. Дело в том, что пользователь сознательно запустил и использует мою программу, а значит готов мириться с неожиданной передачей фокуса моему приложению. И даже наоборот - значит ему именно это и необходимо! Если же он выполняет работу с другими приложениями, при которой ему ничто не должно мешать - он может просто выключить (не включать) мою программу, или просто выключить в ней функцию выдачи окошка с сообщением, оставив допустим только звуковой сигнал. Так что уж пускай конечный пользователь сам выбирает что ему надо - спокойная работа без отвлечений или стопроцентное оповещение о наступившем событии. А тут получается я средсвами виндовс уже на этапе программирования ограничен. Лажа, ничего не скажешь За советы спасибо, всё посмотрю, проанализирую |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
А что за сообщение-то? Можно, как вариант, использовать MessageBox с параметром MB_SYSTEMMODAL
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
P.S.
Для желающих дальнейшего развития темы, я бы порекомендовал почитать: I bet somebody got a really nice bonus for that feature (в основном о всплывающих сообщениях) I bet somebody is looking to get a really nice bonus for that feature: Attention Don't just grab the foreground window and host UI on it Why don't notification icons get a message when the user clicks the "X" button? Because programmers were trusted to do the right thing -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |