Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать фокус своему приложению - просветите как! 
:(
    Опции темы
Evgen_F
Дата 29.7.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



У меня приложение, которое работает в фоновом режиме, то есть сидит себе в трее и делает что-то, в то время как пользователь работает с другими программами.

В определённый момент это приложение должно выдать сообщение пользователю, что произошло какое-то событие. В этот момент соответственно оно должно перевести фокус на себя и оказаться на виду у пользователя, независимо от того с каким приложением он до этого работал. (Хотя может можно выдать окошко с текстом сообщения на вид пользователю и не активировав само приложение? Незнаю)

Так, когда программулина свёрнута в трей, её легко удаётся активировать
Код

MainForm.Show ;
MainForm.Activate;


Однако возникла проблема с тем, когда программа не свёрнута в трей, а просто висит на рабочем столе не активная (например пользователь попользовался а потом не свернул, а так и оставил как есть и перешёл работать с другим приложением).
Мне никак не удаётся в этом случае передать ей фокус (сделать окно приложения активным) и выкинуть на передний план перед пользователю.
Пробовал следующие весчи:
Код

            SetForegroundWindow(MainForm.Handle);
            ShowWindow(MainForm.Handle, SW_SHOWNORMAL);            
            MainForm.FormStyle:=fsStayOnTop;
            MainForm.Show;
            MainForm.Activate;  

Но мне так и не удалось заставить её остаться на виду у пользователя  smile   Она всегда оказывается скрыта окнами других приложений, хотя её кнопка на панели задачь и мигает (мне толка никакого от того, что она мигает).

Не подскажет кто нибудь, что делают приведенные мной функции и где про них можно посмотреть?
Как вобще передаёюся фокус между приложениями в винде и всегда ли они при этом переходят на передний план??
Подскажите, как лучше сделать-то?
PM MAIL   Вверх
CodeMonkey
Дата 29.7.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



А вы знаете, что мигание кнопки на панели задач вместо активации и фокусирования формы было введено Microsoft специально для защиты пользователя от программ, которые считают, что уж их-то сообщение пользователь просто обязан прочитать?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Evgen_F
Дата 29.7.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Я об этом догадывался.

Но что мне делать-то? Мне это мигание ни к селу, ни к городу. Мне нужно чтоб пользователь видел СООБЩЕНИЕ!!
Как быть-то

Это сообщение отредактировал(а) Evgen_F - 29.7.2008, 15:34
PM MAIL   Вверх
CodeMonkey
Дата 29.7.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Пользователь увидит мигающую кнопку вашего приложения в трее и поймёт, что вы хотите показать сообщение.
Так и должно быть. Нехорошо воровать фокус у других приложений. 
Вы поймите, вот вы хотите всенепременно показывать своё сообщение. А конечный пользователь хочет, чтобы ничто его не отвлекало от работы. 
А как насчёт такого сценария: я выбираю пункт из большого меню с кучей пунктов. Или: я пишу текст, не глядя в монитор. И тут появляется ваше окно. Моё меню пропадает, текст тоже (я пытаюсь ввести его в ваше окно). Ну. Будете вы в аду гореть за такие неприятности или нет? smile

Если же вы хотите сделать что-то вроде фоновых всплывающих сообщений - можно посмотреть в сторону 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++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Evgen_F
Дата 29.7.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Цитата

Вы поймите, вот вы хотите всенепременно показывать своё сообщение. А конечный пользователь хочет, чтобы ничто его не отвлекало от работы. 
А как насчёт такого сценария: я выбираю пункт из большого меню с кучей пунктов. Или: я пишу текст, не глядя в монитор. И тут появляется ваше окно. Моё меню пропадает, текст тоже (я пытаюсь ввести его в ваше окно). Ну. Будете вы в аду гореть за такие неприятности или нет?


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

Так что уж пускай конечный пользователь сам выбирает что ему надо - спокойная работа без отвлечений или стопроцентное оповещение о наступившем событии. А тут получается я средсвами виндовс уже на этапе программирования ограничен. Лажа, ничего не скажешь   smile 

За советы спасибо, всё посмотрю, проанализирую
PM MAIL   Вверх
Poseidon
Дата 30.7.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



А что за сообщение-то? Можно, как вариант, использовать MessageBox с параметром MB_SYSTEMMODAL


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CodeMonkey
Дата 30.7.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.