Active Window Switching with Buttons from Powerpro.chm
с различными дополнениями и размышлениями. Я бы положил это куда-нибудь, да временно некуда
Панель переключения между Окнами.
О чем речь идет:
Если Вы хотите создать свою собственную версию Панели Задач ( в дальнейшем именуемой таскбаром) , тогда Вам можно воспользоваться одной из имеющихся у вас панелей Windows PowerPro (а лучше создать новую панель, специально для этой цели, и назвать ее, например, Taskbar) и сделать так, чтобы в этой панели отображались кнопочками все видимые окна запущенных приложений. Как и в обычном таскбаре, щелчок левой кнопкой мыши на кнопке делает соответствующее окно активным, а правый щелчок вызывает меню, предлагающее закрыть или свернуть окно.(Вместо этого можно, конечно, пользоваться повешенным на какой-нибудь хоткей или хотклик меню - списком активных окон, но у панели есть два важных достоинства -- переключение осуществляется за один щелчок, и к тому же все видимые окна перед глазами. Но есть и недостаток -- панель отъедает полезную площадь от Рабочего Стола (то есть Десктопа <!--emo&:)--><!--endemo-->) )
Таскбар можно сконфигурировать так, чтобы в нем показывались только иконки (и так вообще-то по-дефолту, то бишь априорно), в тултипах-подсказках будет тогда отображаться заголовок соответствующего окнаб можно, чтобы отображались только минимизированные окна(это если места мало).С другой стороны, можно задать цвет, ширину, шрифт, картинку-фон, команды для щелчка правой и средней кнопкой мышки по кнопке - за настроив все это для специальной, последней в списке невидимой кнопки. Заголовок окна тогда показывается, естественно, надписью на кнопке.Кроме всего прочего, кнопочка для окна переднего плана может изображаться нажатой.
А теперь как все это сделать(Конфигурация, другими словами):
Итак, создав новую панель -- Таскбар, подумайте, какие вы хотите иметь на ней постоянные кнопочки. (например, можно создать кнопочку, написать на ней Start ...<!--emo&:)--><!--endemo-->). А теперь сделаем, чтобы на панели отображались активные окна. Входим в меню настройки свойств панели (Для этого, например, нажимаем Ctrl и щелкаем правой кнопкой мыши по панели, в появившемся контекстном меню выбираем Configure Properties. В закладке Bars отмечаем галочкой бокс Bar Size from sum of Buttons, переходим на закладку Active Buttons, и ставим галочку на пункте Show Buttons for Active Windows. В вашей панели, вслед за заданными "вручную" кнопками должны появиться иконки для всех открытых видимых окон.
Теперь для чего нужны другие пункты --
Show Buttons for Tray Icons -- сейчас к нам не относится, это чтобы делать трей. (Делать трей сложнее, нужно править реестр -- по крайней мере в XP или в Win2000, про это будет написано в описании использования PowerPro как Shell-а ).
Active Buttons Show Icons only (No Text Label) -позвольте, но у нас и так только иконки показываются! Этот пункт имеет смысл, если отмечен следующий пункт (и вообще-то их стоило бы поменять местами ) :
Last Item In Caption List is used to Set Up Active Buttons.
Отметьте этот пункт, потом создайте еще одну кнопку в панели, проследите ,чтобы она была последней в списке и главное, не вписывайте ничего для выполнения по левому клику! Оформление этой кнопки будет использоваться для оформления всех кнопок для активных окон, а сама эта кнопка не будет показываться в панели (если пункт Last Item ... used to set... отмечен). Так можно оформить ширину кнопок, их цвет, цвет надписи на них - пишется заголовок соответствующего окна, сколько влезет при данной ширине кнопки и шрифте, -- целиком же заголовки отображается в Тултипах. если вы не хотите, чтобы на кнопках писалось что-либо, как раз отметьте предыдущий пункт.Можно так же задать команды для щелчков провой и средней кнопками мыши -- к сожалению стандартное меню для правого щелчка по кнопке -- Показать/Свернуть/Закрыть при оформлении по последнему элементу списка перестает работать.
Show Button corresponding to active window as pressed. -- Кнопку для окна переднего плана показывать нажатой (термин active window двусмысленен - иногда это синоним visible window, а иногда -- foreground window )
Show only minimized windows as active buttons -- показывать кнопки только для свернутых окон.
Ну и наконец сверху окошко, в котором надо выставить максимальное количество отображаемых активных окон (оно должно быть больше нуля <!--emo&:)--><!--endemo--> ) а снизу --поле в которое можно вписать окна с какими заголовками будут (или не будут -- если с тильдой) отображаться кнопками на панели (или окна какого класса, или окна, запущенные какой программой).
Как уже было сказано, с помощью Last Button ...for Setup, можно задать команду для щелчка правой или средней кнопкой мыши для кнопки на таскбаре. Если вы хотите задать какое-либо действие над окном, к которому относится кнопка, назначте как обычно command :*Window, control action - что вы хотите, (Close, Hide, Min, Show, OnTop... ), target: тут надо написать activebar.(Довольно логично также повесить на правый клик меню со списком разных действий с соответствующим окном, в качестве таргета каждый раз указывая activebar).
В начале мы написали, что для таскбара стоит установить режим Bar Size from sum of Buttons, тогда таскбар растет и уменьшается в соответствии с количеством кнопочек на нем, а ширина кнопки, как уже было сказано задается шириной иконки или шириной последней "служебной" кнопки, см. выше. Можно сделать таскбар постоянной ширины, отключив Bar Size from sum of Buttons, и отметив 3D Frame а позицию панели определить как Floated. после этого панель нужно растянуть на нужную ширину , перенести на нужное место, и при желании, сделать Locked, или назначить ему нужную позицию. В этом случае задавать ширину последней "служебной" кнопкой но особо полезно, так как если все кнопки будут заданной ширины, то те что не влезут в фиксированную ширину панели просто исчезнут, в обратном же случае кнопки будут расширяться и сужаться в соответствии с их количеством.
Если У вас какие-либо проблемы с надписями на кнопках (говорят, такое бывает в 95/NT 4)
войдите в Command List|Setup|All Bars. и отметьте бокс "Dynamically update active button text". Тут же можно настроить несколько дополнительных опций :
One Active Button per Task -- до сих пор у нас был скорее не таскбар, а Active Window Bar --
другими словами, все Open/Save диалоги, палитры , висящие панели инструментов, бегунки копирования файлов -- все отображается отдельными кнопками. иногда это удобно, иногда нет. Отметив этот пункт, вы решительно сократите число кнопочек, загромождающих вашу панель и приведете ваш таскбар к виду, который имел обычный до XP-шный таскбар (т.е. без группировки, все документы Worda и окошки Internet Explorera продолжают представляться отдельными кнопками -- для группировки необходимо применять отдельные усилия, см. ниже)
Другой способ уменьшить количество кнопок в таскбаре -- дописать к списку окон, который вы хотите/ не хотите видеть в таскбаре (это, как мы помним, в |Properties|Active Buttons|) ", nodialog" -- и любые конфигурационные диалоги перестанут появляться в таскбаре, в частности все окна pproconf -- они все конфигурационные диалоги.
Click Active Button for Foreground to minimize it - Сворачивать окно переднего плана по нажатию соответствующей кнопки.
Sort Active Buttons for Caption -- сортировать кнопки на панели согласно заголовкам в алфавитном порядке. (контролировать порядок сортировки можно еще боксом в соседней закладке All Bars and Menues )
Show Tray Iconized Windows on active buttons -- опять-таки мешать трей с таскбаром.
(и опять "родственный" бокс есть на соседней закладке All Bars and Menues:
List of captions of hidden windows to be shown on active buttons and active menus - тут можно вписать, какие окна показывать в трее, даже если вы их "случайно" скрыли <!--emo&:)--><!--endemo-->)
Еще в All Bars and Menus:
Omit these strings for active buttons ... -- а тут вы можете задать окна, которые PowerPro ни при каких обстоятельствах не будет считать активными.
Еще в All Bars and Menus:
Use timer for active/caption bars - отметьте этот бокс, если ваш таскбар начинает время от времени зависать -- некоторые программы мешают PowerPro автоматически обновлять список активных окон.
Наконец, если вы хотите поменять иконки, отображаемые в таскбаре для тех или иных програм, создайте Command List, в котором заголовки соответствуют запускаемым програмам (=exename), а иконки выставьте такие, какие вам для данной программы потребны. остальные поля оставьте пустыми. Теперь в Command List|Setup|Special Lists в боксе Active проставьте ваш лист.
------------------------------------
Дальнейшее уже совсем не имеет отношения к хелпу, а описывает мой собственный опыт создания группировки окон , запущенных одним приложением, но в разных процессах. Я не знаю, как это делать в общем случае, но, в конце концов, виновники захламления таскбара известны: это Internet Explorer и компоненты Microsoft Office, например Word. Я не пользуюсь Internet Explorer, по-этому далее речь пойдет о Wordе.
1.Для начала сделаем, чтобы в таскбаре не отображались окна Worda :
в |Properties|Active Buttons| only include windows... вписываем ~ =winword
2.Создаем новый Command List, назовем его, например, WordBar, чтобы отслеживать в нем окна worda -- |Properties|Active Buttons| only include windows... вписываем *Microsoft Word* и отмечаем Show Duttons for Active Windows.
Теперь у нас есть два тулбара, один для документов Word, один для всего остального.
Осталось их как нибудь склеить -- например сымтировать XP-шный тулбар.
3. Сделаем кнопку в WordBare, назовем ее, например, List_, в качестве "левого" действия назначим *Format StartSubbar.
4.Сделаем еще одну кнопку для форматирования кнопок для октивных окон, зададим ширину.
5. В WordBar войдем в настройку |Properties|Bars| и отметим Vertical Bar, Topmost, Bar size from sum of buttons. Slide direction for Show выставим from button, если конечно таскбар у нас внизу. Position -- floating, Hide After --500 ms (например).
6. В таскбаре создадим кнопку(не последнюю!!), назовем ее, например, Word, и на левый клик по ней повесим *Bar SelectSubBarToMouse WordBar@List_ .
Все почти готово, осталось только научиться прятать кнопку для Worda когда тот не запущен.
Для этого:
7. создадим следующий скрипт:
wordcheck.powerpro
- Код: выделить все
if (anywindow "*Microsoft Word*") Do
format item item 2 list "TaskBar" hide 0
Else
format item item 2 list "TaskBar" hide 1
Endif
В принципе, этот скрипт можно посадить на таймер, или вписать в Monitor (Это такой Command List, который запускается на исполнение каждые две секунды).
Но я не люблю частые таймеры, от них все мерцает и другие скрипты плохо работают. Разумней запускать этот скрипт, когда Word запускается, а потом когда он закрывается.
8.Для первого в |Command Lists |Setup|Special Lists| Open: надо вписать имя листа, (предварительно его создав) в котором по заголовкам окон задаются действия при их появлении.
в этом Open- листе создаем элемент под именем *Microsoft Word* и вкачестве "Левого" действия прописываем .wordcheck
9.К сожалению, специального листа, выполняемого при закрытии окон, нет, но поскольку я обычно закрываю окна Worda, щелкая по крестику, то просто повесил .wordcheck на leftclose в окне Worda. На случай если я закрою Word каким-нибудь другим образом, и кнопка Word останется болтаться в таскбаре, я повесил средним кликом по этой кнопке тот же .wordcheck.