![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создать приложение подобное "Панели MS Office"
lightix © (2004-10-07 11:22:00)Как сделать сабж? Подобие заключается в плане того что приложение должно быть всегда поверх всех окон.
DVM (2004-10-07 11:36:00) [1]Короче, объясню популярно, почему инструментальные панели типа Панели задач и панели офиса всегда сверху. Точнее они не всегда сверху, но почти.
Панелями заведует функция ShAppBarMessage(). А самой этой функцией заведует Проводник. Проводник ставит ловушку WH_SHELL и некоторые другие и отслеживает активацию, создание, удаление топ-левел окон (для панели задач в первую очередь). Попутно он сообщает всем панелям через ShAppBarMessage() и говорит им когда надо двигаться наверх и когда прятаться. А прятаться иногда надо (запущено полноэкранное приложение). Таким образом панель задач и все панели всегда лезут наверх при активации любого окна.
Вывод такой: поставить глобальный хук WH_SHELL и при активации окон двигать свое окно наверх SetWindowPos().
lightix (2004-10-07 11:34:00) [2]
> DVM © (07.10.04 11:28) [3]
> ShAppBarMessage(). Ты зря не послушал мой совет про WH_SHELL.
> Это самое верное, поверь.
расскажи поподробнее плиз
lightix (2004-10-07 11:33:00) [3]Интересное наблюдение - если сделать в приложении 2 формы и главную выставить StayOnTop то она будет наверху.
а если главная Normal, а вторая StayOnTop и вызывается по кнопке из первой как Show то она прячется.
Получается что зависит это от каких то свойств формы?
DVM (2004-10-07 11:28:00) [4]ShAppBarMessage(). Ты зря не послушал мой совет про WH_SHELL. Это самое верное, поверь.
begin...end (2004-10-07 11:26:00) [5]Может, SetWindowPos() с HWND_TOPMOST поможет...
lightix (2004-10-07 11:24:00) [6]Если сделать приложение с 1-й формой и выставить для нее FormStyle=fsStayOnTop - то получается нечто похожее.
А если несколько форм - то почему то не получается