Всплавающее окно поверх всех программ без фокуса
От: shmelina  
Дата: 14.09.07 09:52
Оценка:
Есть такая задача.
Работает программа. В фоновом режиме она проверяет наличие некоторых событий. Если событие есть, то показывается специальная форма-оповещение. Но форма эта должна отображаться в панели задач и не должна забирать на себя фокус. Кроме того:
— если форма на заднем фоне (на главным окном), то при наступлении события она должна показываться (не беря на себя фокус опять же)
— если форма оповещения свернута, то при наступлении события она должна показываться (не беря на себя фокус)
— если форма оповещения закрыта (но висит в памяти), то при наступлении события она должна показываться (не беря на себя фокус)
— если пользователь работает в другом приложении, то при наступлении события она должна показываться (не беря на себя фокус)
— форма не должна быть модальной или иметь признак "всегда сверху"

Что пока получилось:
— В панели задачи мы сидим.
— Первый показ окна оповещения срабатывает (после Create).

Не получилось:
— Второй и следующие показы не хотят показывать окно. Оно остается на заднем фоне.

Как в панель задач пихал окно писать не буду, оно вроде понятно.

Окно оповещения создается так:
Form.Create(nil);
Причем создается один раз и не уничтожается, пока не закроют программу. Так надо!

Показывается окно так:
ShowWindow(Form.Handle, SW_SHOWNOACTIVATE);
Form.Visible := True;

Первый показ происходит правильно, остальные — нет. Эксперименты с использование метода тыка не помогли.

Помогите пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.