Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Окно, подобие понели задач


Alexey_K ©   (2007-09-16 23:59:00) 

Пишу оболочку под Win, вот возник вопрос, каким образом создать окно (какие должны быть свойства), чтобы оно было подобно панели задач в винде, т.е. ограничивало разворачивание других окон, чтобы они (эти окна) не перекрывали его при "разворачивании".


DVM   (2007-09-17 12:09:00) [1]


> но с утверждением, что TaskBar не является AppBar-ом (т.
> е. не участвует в операциях с другими AppBar-ми) не соглашусь
> :-)

Участвовать, не значит быть. :) Конечно, все расчеты положения остальных аппбаров строятся с учетом панели задач. Но она сама по себе - она для расчета своего положения не использует список координат остальных аппбпров (который у нее есть). Наоборот, она правит этот список в соответствии с собственным положением. Таким образом она всегда царь горы (края экрана) :)

Короче играет не по правилам.


Lacmus   (2007-09-17 11:45:00) [2]

>DVM ©   (17.09.07 11:35) [14]

С координацией действительно начались проблемы, но с утверждением, что TaskBar не является AppBar-ом (т.е. не участвует в операциях с другими AppBar-ми) не соглашусь :-)


DVM   (2007-09-17 11:36:00) [3]


> ShAppBarMessage шлет WM_COPY

WM_COPYDATA имелось ввиду.


DVM   (2007-09-17 11:35:00) [4]


> Думаю, Вы ошибаетесь, достаточно закрыть explorer.exe.

В чем ошибаюсь? В том, что эксплорер управляет аппбпрами? Это действительно так. Убейте процесс эксплорера и убедитесь, что аппбары потеряют всю свою функциональность. Т.е. окна конечно остануться, но вот работать все будет неверно - они потеряют взаимную согласованность, т.к. некому больше будет корректировать их взаимное положение.

ShAppBarMessage шлет WM_COPY дата окну панели задач. В lParam сообщения вся информация об аппбаре. Панель задач корректирует данные в lParam и они частично возвращаются аппбару через ShAppBarMessage.


Lacmus   (2007-09-17 11:25:00) [5]

>DVM ©   (17.09.07 11:12) [11]

Думаю, Вы ошибаетесь, достаточно закрыть explorer.exe.


Alexey_K   (2007-09-17 11:19:00) [6]


> Это надо делать через установку ловушки WH_SHELL и функцию
> RegisterShellHook(). Так делает эксплорер.
>
>
> > вот никак я не догрню, как сэмулировать трей?
>
> Перехват сообщений WM_COPYDATA адресованных окну панели
> задач. Или заменить окно панели задач свои с тем же классом.
>


Во! За это пасиб, всё даже проще, чем я думал ;)


DVM   (2007-09-17 11:12:00) [7]


> Интересно, что Вы имеете ввиду ?

То, что написал, то и имею ввиду. Панель задач - не Аппбар, т.к. ее функциональность реализована напрямую в обход механизма управления аппбарами, который встроен в эксплорер. Грубо говоря сама панель задач и управляет аппбарами (сообщения от аппбаров приходят ее дочернему окну TrayNotifyWnd). Панель задач не вызывает функцию ShAppBarMessage().


> если приложение запускается и у него есть окно (и оно не
> тул или диалог), то создается кнопочко на панели для переключения
> к этой задаче

Это надо делать через установку ловушки WH_SHELL и функцию RegisterShellHook(). Так делает эксплорер.


> вот никак я не догрню, как сэмулировать трей?

Перехват сообщений WM_COPYDATA адресованных окну панели задач. Или заменить окно панели задач свои с тем же классом.


Alexey_K   (2007-09-17 11:01:00) [8]


> эээ...не торопись утверждать, скорее всего есть масса глюков.

ну тут просто (может и не сильно эффективно), если приложение запускается и у него есть окно (и оно не тул или диалог), то создается кнопочко на панели для переключения к этой задаче, ща думаю над папками.

вот никак я не догрню, как сэмулировать трей?


Lacmus   (2007-09-17 11:00:00) [9]

>DVM ©   (17.09.07 10:29) [2]
Интересно, что Вы имеете ввиду ? (на примере автоскрытия панели)


DVM   (2007-09-17 10:49:00) [10]


> было ВСЕГДА поверх всех окон

Ну это несложно (SetWindowPos() + WM_WINDOWPOSCHANGING), только окно панели задач не всегда сверху всех окон.


> > Или сам список задач интересует
>
> это уже реализовано

эээ...не торопись утверждать, скорее всего есть масса глюков.


Alexey_K   (2007-09-17 10:45:00) [11]

1)
> Или сам список задач интересует

это уже реализовано
2)
> Чтобы окно липло к краям экрана и его нельзя было оторвать,
>  но можно было бы переместить к другому краю и имзменить
> размер

именно так, чтоб оно просто ограничевало рабочее пространство других приложений + было ВСЕГДА поверх всех окон, желательно даже поверх диспетчера задач...


DVM   (2007-09-17 10:35:00) [12]


> Во во, а как реализовать именно такой бар как панель задач?

Панель задач - понятие очень широкое. Что именно тебя интересует? Чтобы окно липло к краям экрана и его нельзя было оторвать, но можно было бы переместить к другому краю и имзменить размер? Или сам список задач интересует?


Alexey_K   (2007-09-17 10:35:00) [13]


> SystemParametersInfo() + SPI_SETWORKAREA

во пасиб, буду юзать...


Alexey_K   (2007-09-17 10:33:00) [14]


> Окно панели задач само не является AppBar-ом.

Во во, а как реализовать именно такой бар как панель задач?


DVM   (2007-09-17 10:32:00) [15]


> Alexey_K ©

Т.к. ты пишешь свою оболочку, то о стандартном механизме управления Appbar-ами, что предложено в [1] можешь забыть. Необходимое поведение окна надо программировать самому, а чтобы работали аппбары, надо программировать и механизм управления ими.


> .е. ограничивало разворачивание других окон, чтобы они (эти
> окна) не перекрывали его при "разворачивании".


SystemParametersInfo() + SPI_SETWORKAREA


DVM   (2007-09-17 10:29:00) [16]


> Однокамушкин

Окно панели задач само не является AppBar-ом. Оно не подчиняется механизму управления AppBar-ами Explorera.


Однокамушкин   (2007-09-17 09:59:00) [17]

http://www.rsdn.ru/article/winshell/appbars.xml


Наверх

Титульная страница Поиск, карта сайта Написать письмо