...
...

StimulControls.Net: DockingManager может быть бесплатным

0. Партсобрание

На всякий случай для тех, кто еще не в курсе событий. Последнее время в мире .NET произошло пару знаменательных событий, о которых нельзя не упомянуть. Первое — запущено бета-тестирование VS2005 Beta 2. По масштабности эта акция сравнима с внедрением в массы SP2 для Windows XP. По вашей заявке по указанному в форме адресу высылаются диски со всем передовым ПО Microsoft для разработчиков и буквально тоннами обучающего материала. Не уверен в актуальности предложения на момент выхода статьи в печать, но все же…

N.B. По задумке диски с VS2005 Beta 2 являются бесплатными. Но, судя по сообщениям посетителей GotDotNet.ru, не у всех все так гладко, как это было с SP2.

Второе — объявлен новый конкурс для разработчиков (по всем вопросам обращайтесь на сайт сайт ). Если помните, в прошлый раз в качестве главного приза разыгрывался автомобиль. Сейчас автомобиль нам не грозит, зато всем участвующим раздают лицензии на VS2003 Professional Special Edition или VB .NET 2003 Standard Edition (в зависимости от номинации). Чем-то эта акция мне напоминает распродажу: то, что не расхватали на протяжении сезона, сейчас уходит с молотка (в одни руки — одна лицензия). Зато у вас появится возможность ощутить value of legal software на собственной шкуре (если вы до сих пор этого еще не сделали). Однако, если смотреть глубже, этот конкурс народного творчества можно использовать для демонстрации себя как программиста, ведь самые лучшие разработки будут рассылаться подписчикам MSDN. Авось вас заметят — и завербуют… К слову, совсем недавно на все том же GotDotNet.ru появилась новая рубрика, Channel9, где для скачивания доступны интервью (и не только) с русскоязычными разработчиками из Microsoft. Рекомендую к просмотру.

1. Введение

В данный момент на просторах Интернет вряд ли удастся найти хотя бы десяток качественных и бесплатных наборов компонентов, тем более с поддержкой такой модной нынче фичи, как Docking Windows. Но StimulControls.Net — как раз один из этих немногих. Безусловно, он даже не может претендовать на почетное место рядом с такими проприетарными исполинами, как пресловутый Infragistics, монструозный DevExpress, менее популярный, но оттого не менее качественный и интересный Syncfusion Essential Suite, ну и, натурально, ComponentOne Studio, которая на фоне нынешних конкурентов выглядит уже не так впечатляюще, как во времена VS6. Тем не менее, для "вольного писателя" элементы управления от конторы StimulSoft должны показаться довольно привлекательным решением.

2. Подключаем

Не спеша выкачиваем необходимую библиотеку и сопроводительную документацию вот отсюда:
сайт . Размер дистрибутива составляет что-то около 1,5 Mb. Текущая версия — v1.06. Данные компоненты распространяются в двух редакциях: free edition и commercial edition ($94,95 + source). На бесплатную версию налагаются некоторые ограничения, а именно: в вашей программе обязательно должна быть ссылка на официальный сайт разработчиков, а также их copyright, сама же программа должна распространяться абсолютно даром. На мой взгляд, эти ограничения для потенциальной публики не чинят каких-либо препятствий. После того, как ваш download-менеджер отрапортовал об успешной загрузке, можете приступать к установке. Она пройдет быстро.

В результате в каталоге установки вы обнаружите, кроме самой библиотечки, пару-тройку примеров на C# и VB.NET, а также справку в формате *.chm по всем классам сборки. Легким движением руки запускаем VS2003. На вкладке Toolbox заводим для наших новобранцев отдельную группу, например, StimulControls.Net, и добавляем ссылку на библиотеку с вожделенными элементами управления. Новая группа заводится через контекстное меню с помощью команды Add Tab. Далее из того же контекстного меню выбираем пункт Add/Remove Items… В появившемся диалоговом окне на закладке .NET Framework Components щелкаем по кнопке Browse… и, наконец, ссылаемся на файл библиотеки. Она у вас должна лежать по адресу …Program Files/Stimulsoft/StimulControls.Net Free Edition/Bin/Stimulsoft.Controls.dll. Напротив контролов, содержащихся в этой библиотеке, уже автоматически будут проставлены галочки, и нам останется только подтвердить свой выбор нажатием кнопки OK.

3. Изучаем

3.1. DockingManager


Первым делом познакомимся с DockingManager — компонентом, организующим работу с пристыковывающимися окнами. Популярность таких окошек отнюдь не случайна. Главный инструмент .NET-разработчика, VS2003, оперирует ими вовсю, наглядно иллюстрируя, насколько это удобно. К тому же, сам факт присутствия такой функции косвенно свидетельствует о ненаплевательском отношении программиста к своему детищу и придает его продукту профессиональный вид. Здесь DockingManager поразил меня до глубины души. Если для того, чтобы заставить заработать DockingManager от Syncfusion, мне пришлось штудировать прилагающуюся документацию (благо она на высоте), то здесь я расправился двумя щелчками мыши.

А сейчас мы вместе с вами попробуем пристыковать пару панелей и объединить их в группы по интересам. Для этого два раза щелкаем по кнопке stiDockingManager на панели инструментов. Доступ к функциональности менеджера осуществляется либо посредством контекстного меню, либо через окно Properties. Нам разрешается добавлять панель в нижнюю или верхнюю часть окна, справа или слева — другими словами, воспользоваться командами Add to bottom, Add to top, Add to right и Add to left соответственно. С помощью этих действий мы имеем право добавить одну или несколько групп. Далее работа идет уже с конкретной группой, т.е. с компонентом stiDockingPanel. Этот компонент имеет при себе лишь одну специфическую команду — Add Control, при выборе которой добавляется новая вкладка. Здесь для нас самыми интересными свойствами являются текст закладки и иконка.


Буквально за пару щелчков мыши удается добиться желаемого результата.

Как только вкладок становится больше одной, к нижней части группы подключаются табы для переключения между закладками. В дизайнере имеется возможность только пристыковать группу к другому краю формы (регулируется свойством Dock), переключаться между вкладками, а также размещать на них контролы. А вот во время выполнения есть повод порезвиться: можно отстыковывать группы (и пристыковывать обратно), растаскивать вкладки одной группы по разным углам или прикреплять к другой группе, объединять несколько групп в одну, перегруппировывать вкладки… Конечно, не обошлось и без режима auto-hide.


Как только группа вкладок находится неподалеку от кромки, потенциальное местоположение оттеняется приятным глазу фоном.

N.B. Если в VS2003 вкладка в режиме auto-hide выезжает поверх формы, то в нашем случае вкладка толкает своих соседей, отвоевывая себе место под солнцем. Никакого криминала в этом нет: подобный эффект можно расценивать лишь как особенность данного набора. Хотя как программист могу заявить, что тут разработчики пошли по пути наименьшего сопротивления (и правильно).

3.2. MenuProvider


Как и везде, функциональности по минимуму. О скрытии неиспользуемых пунктов меню остается только мечтать.

Несмотря на то, что работа с MenuProvider настолько же проста, как и с DockingManager, завести его с полтычка мне не удалось. На самом деле мы имеем дело со своего рода посредником. Как говорится, все гениальное просто. Меню создается с помощью стандартного компонента MainMenu. А далее каждому пункту меню назначается своя иконка (в дизайнере появляются дополнительные свойства для этого) — и все! Меню при запуске, словно по мановению волшебной палочки, принимает стильный облик. Жаль только, что действие MenuProvider не распространяется на полоску главного меню… Для сохранения цельности интерфейса придется перерисовывать ее вручную.

3.3. OutlookPanel


Кнопки для тулбара нашли свое применение в свитках OutlookPanel.

Подобно пристыковывающимся окнам раскрывающиеся списки — еще одна дань последней моде. В наборе StimulControls.Net для этого служит OutlookPanel. Точно так же, как мы добавляли вкладки в группу пристыковывающихся окон, здесь добавляются эдакие свитки. Только теперь для этого служит уже команда Add Panel. Далее работа полностью идентична: переключаемся между свитками и размещаем необходимые элементы управления. В дизайнере свитки сворачиваются/разворачиваются с помощью дополнительных команд — Collapse и Expand.

3.4. ToolBar

Убогость стандартного ToolBar породила не одну попытку его усовершенствовать. ToolBar от StimulSoft есть не что иное, как еще одна "вариация на тему". Сам toolbar живет отдельно от своих кнопок либо выпадающих списков. Это позволяет использовать кнопки в любых других целях. И все же функциональность этой панели инструментов ограничена. Ее можно только таскать по строго заданному пространству. Сделать из нее плавающее окно или модифицировать набор доступных кнопок не получится. Точно так же не получится совместить команды панели инструментов с командами меню. Смысл тут вот в чем. Создается определенный набор команд, которые впоследствии размещаются как в меню, так и в панели инструментов. В результате нужно будет поставить всего один обработчик события для каждой такой команды — и наше меню вместе с панелью инструментов под контролем. Так дело обстоит в серьезных наборах, но в нашем случае придется изощряться с шаблоном проектирования Command (если, конечно, мы захотим, чтобы все у нас было по уму).


Аскетичный ToolBar все же лучше стандартного.

Поработав с sciToolBar, могу порекомендовать один прием. Размещать панели инструментов следует в специально отведенном Panel с Dock = DockStyle.Top, иначе тулбары будут все время перекрываться другими элементами управления, и ничего с этим поделать не удастся. Ну, разве что установить у самих тулбаров свойство Dock в DockStyle.Top, но тогда мы избавляем пользователя от удовольствия перетаскивать панели инструментов.

3.5. На закуску

А сейчас галопом пробежимся по оставшимся контролам, на чем и завершим сегодняшний разбор.
StiButton. Единственной особенностью, отличающей его от стандартной кнопки, является способность отсекать текст, который не влазит по ширине (регулируется свойством WordWrap), подставляя вместо него троеточие.
StiButtonEdit. По сути, это композитный контрол, который состоит из текстового поля и кнопки. Событие щелчка по этой кнопке нам и предлагают отслеживать. По опыту общения с аналогичными элементами управления известно, что по нажатию на кнопку должен вываливаться произвольный контрол. Но здесь этого нет. Хотя это даже лучше: вы можете сами решать, как обрабатывать щелчок по этой кнопочке. А свобода выбора зачастую решает многое…
StiCheckBox, StiGroupLine. Все, чем могут похвастаться эти контролы — возможность отрисовывать после текста вдавленную черту.
StiColorBox, StiColorButton. А вот этой штуки очень часто не хватает. Она позволяет выбирать цвет точно так же, как вы это делаете в VS2003. Т.е. по нажатию на кнопку со стрелкой выезжает панель с тремя закладками и предопределенными цветами. Но имеющихся в наличии цветов иногда недостаточно, поэтому без кнопки Others… не обошлось.
StiCoMboBox, StiListBox. В дополнение к стандартному комбику и листбоксу эти умеют отображать изображения напротив элементов списка — да, к тому же, перемещать фокус за указателем мыши.
StiFontBox. Причиндал, по полезности схожий с stiColorBox. Если список доступных шрифтов — не вопрос, то вот отобразить рядом начертание каждого шрифта вечно недосуг. А тут все уже сделано за нас.
StiGroupBox, StiNumericUpDown, stiRadioButton, stiTextBox. Лишь слегка подретуширован экстерьер.
StiPanel. В наличии имеется с десяток стилей оформления бордюра.
StiRichTextBox, StiScrollableControl. Немного расширяет арсенал компонентов от Microsoft.
StiTabControl. Стилизованный дизайн, можно располагать закладки по нижней кромке и присваивать индивидуальную иконку.
StiTreeView, StiTreeViewBox. А эти ребята меня огорчили. И не потому, что не предоставляют мне каких-либо атрибутов, которых мне всегда так не хватало. Просто они сохранили неприятную особенность своего предка: паразитную горизонтальную полосу прокрутки. Эх, придется опять заниматься саб-классингом. А ведь в FAQ сайта GotDotNet.ru решение этой проблемы описано достаточно хорошо. Жаль только, что вражеские программисты не читают русских FAQ…

4. Делаем выводы

Вот что у меня вышло в результате моих получасовых сражений.


Около получаса работы – и дело в шляпе: неплохая заготовка для редактора кода "с претензией"

Как видите, аккуратненький интерфейс без изысков нам по силам. Для полноты картины я использовал Editor из Syncfusion Essential Suite v1.6.1.8. Ради интереса я решил посмотреть на работу StimulControls.Net в VC# .NET 2005 Express Edition Beta (как мне сообщили в Microsoft, моя Beta 2 уже со всех ног спешит ко мне, но пока еще где- то задерживается). Каково же было мое удивление, когда заработали все компоненты, за исключением разве что MenuProvider. Как выяснилось, осечка произошла вследствие несовместимости типов (MenuStrip в .NET Framework 2.0 вместо MainMenu в .NET Framework 1.x). По идее, можно было бы соорудить что-то на манер Adapter'a. Но, судя по всему, необходимость в перерисовке стандартного меню в VS2005 отпадает, т.к. теперь у Microsoft есть свое, и не хуже (то же самое касается и ToolBar). Хотя каждому все равно не угодишь, чем и пользуются многие компании, специализирующиеся на разработке альтернативных контролов.
Таким образом, у нас на руках имеется отличный набор элементов управления, и, что самое главное, бесплатный. Энтузиастам он должен показаться особенно интересным. И несмотря на все — однозначный must have, однозначный стимул к работе.

P.S. Во время нашего партийного собрания я упустил из виду один очень важный нюанс. Белорусским разработчикам под платформу Microsoft .NET посвящается. В феврале была организована Minsk .NET UG. Официальный сайт: сайт . Информационная поддержка:
сайт . Присоединяйтесь!

2005, Алексей Нестеров, eisernWolf@tut.by

© Компьютерная газета

полезные ссылки
Аренда ноутбуков