|
|
|||||||||||||||||||||||||||||
|
Ribbon Controls шаг за шагом. Шаг 2 - дополнительные элементы интерфейсаИсточник: webdelphi
Источник: webdelphi Продолжаем медленно, но верно углубляться в Ribbon Controls. В предыдущем посте я рассмотрел разработку простого интерфейса без каких-либо "наворотов", наподобие галерей элементов, меню и и т.д. Сегодня займемся именно этим. Кстати, сразу замечу, что я далеко не специалист в вопросах работы с Ribbon Controls и всё, что я рассказываю - это не более, чем мои попытки разобраться с этими компонентамиDelphi. Поэтому, если Вы заметите какие-либо недочёты или (не дай Бог) ошибки в моих рассуждениях - не стесняйтесь, отписывайте комментарии с замечаниями. Так, я думаю, со временем можно будет собрать более-менее подробное руководство по использованию компонентов Ribbon в Delphi, которое пригодится многим. Ну, а теперь продолжим начатое. 1. Split Buttons. Что это и как сделать?Перед Вами, уже ставший привычным, элемент интерфейса Word 2007 - split-кнопка для вставки текста. Те, кто изучал английский язык, без труда поймут почему кнопка называется именно так (split - расщепленный, разделенный пополам). Slit-кнопка состоит из двух частей: верхняя часть - для выполнения основного действия, нижняя часть - для вывода списка дополнительных действий в виде меню. Например эта же самая кнопка выполняет сразу три действия:
Теперь, что касается создания собственных split-кнопок. Вернемся к нашему тестовому приложению и создадим такую кнопку у которой основное действие - то открытие главной страницы блога, и пара дополнительных действий - на открытие различных страниц блога.
Таким образом, по умолчанию все новые действия в ActionManager"e будут, как и полагается, иметь маленькую пиктограмму 16х16 пикселей и при необходимости мы сможем её изменять на большую. Теперь создаем новое действие в ActionManager"e и сразу изменяем его свойства:
В обработчике пишем: procedure TForm3.OpenIndexExecute(Sender: TObject); begin WebBrowser1.Navigate('http://webdelphi.ru'); end; Теперь создаем дополнительные действия для кнопки. Первое дополнительное действие - открывает страницу для подписки на RSS. Свойства действия:
Обработчик действия: procedure TForm3.RSSIndexExecute(Sender: TObject); begin WebBrowser1.Navigate('http://feeds.feedburner.com/myDelphi'); end; Второе дополнительное действие загрузит страницу со списком всех статей блога. Его свойства:
Обработчик действия: procedure TForm3.OpenListExecute(Sender: TObject); begin WebBrowser1.Navigate('http://www.webdelphi.ru/spisok-statej/'); end; Теперь перетаскиваем действие (TAction) OpenIndex на свободную панель Ribbon и задаем новому элементы следующие свойства:
Теперь переходим к свойству Items и добавляем дополнительные действия на кнопку. Для этого:
Запускаем приложение и любуемся результатом: Как видите, ничего особенно сложного делать не пришлось. Единственное, что остается заметить по поводу split-кнопок - это то, что обычно в дополнительные действия включается и основное. Т.е. в нашем случае в списке дополнительных должно бы присутствовать и действие на открытие главной страницы блога. Я не стал этого делать дабы немного сократить список однотипных действий. Переходим к следующему вопросу - создание галерей. 2. Галереи в RibbonГалереи (Galery) - это новое слово в науке и технике по сути ещё одна разновидность выпадающего меню, реализованная в интерфейсах Ribbon. В отличие от простых PopUp-меню и Split-кнопок, в галереях могут содержаться большие графические элементы. Вот, например, содержание галереи "Библиотека нумерации" из Word 2007 (с описанием элементов): Как видите, галерея имеет очевидные преимущества перед обычными текстовыми меню. Во-первых, использование такого элемента интерфейса значительно улучшает внешний вид приложения в целом. Во-вторых, галерея предоставляет пользователю информацию в более удобной и понятной форме. Согласитесь, что если бы вместо крупных рисунков, демонстрирующих различные нумерованные списки, нам бы показали обычное меню с пунктами, типа "Список с латинскими буквами и точкой", то лишний раз заходить в такое меню нам врядли доставило бы удовольствие, а если представить подобное текстовое меню, например, для выбора стилей оформления страницы, то и голову бы сломали думая, что имелось в виду под названиями наподобие "Апекс" или "Солнцестояние". А галерея дает нам четкое и однозначное представление о том к чему приведет то или иное действие. Теперь попробуем создать простую галерею. Пусть, например, в галерее будут содержаться картинки, демонстрирующие различные стили оформления для Ribbon. Смысл создания галерей примерно тот же, что и для split-кнопок, но за одним исключением - все действия (Actions) для галереи должны относиться к одной категории. До этого момента, мы сильно не задумываясь создавали новые действия в ActionManager"e и они автоматически попадали в группу (No Category). В галерею такие действия врядли попадут (по крайней мере мне акого сделать пока не удалось). Так как наша галерея будет содержать большие рисунки (100×100 пикселей), то целесообразно для них задействовать ещё один компонент - TActionList (страница Standard палитры компонентов) и новый ImageList. Это избавит нас от лишних мучений с Action Manager. Итак, укладываем ActionList и новый ImageList на форму и танцуем с бубном проводим следующие изменения в свойствах:
Теперь все новые действия из ActionList"а будут автоматически линковаться в ActionManager. В ImageList загружаем изображения. Если необходимо, то изображения (100х137 пикселей) различных стилей Ribbon Вы можете скачать здесь. Добавляем новые элементы галереи. Для этого:
Теперь в ActionManager"e обычным образом создаем новое действие, например с названием styles . Укладываем новый элемент на панель и изменяем его свойства следующим образом:
Пишем обработчики. Пусть по умолчанию основным стилем оформления будет стиль Luna. Тогда обработчик для styles будет следующим: procedure TForm3.StyleActionExecute(Sender: TObject); begin Ribbon1.Style := RibbonLunaStyle; end; У событий галереи обработчики будут такими: procedure TForm3.galery_LunaExecute(Sender: TObject); begin Ribbon1.Style := RibbonLunaStyle; end; procedure TForm3.galery_ObsidianExecute(Sender: TObject); begin Ribbon1.Style := RibbonObsidianStyle; end; procedure TForm3.galery_SilverExecute(Sender: TObject); begin Ribbon1.Style := RibbonSilverStyle end; На всякий случай обращаю внимание - для того, чтобы изменить стиль оформления Ribbon у вас в uses должны быть подключены три модуля: RibbonLunaStyleActnCtrls, RibbonObsidianStyleActnCtrls и RibbonSilverStyleActnCtrls. Теперь проверим работоспособность нашей галереи. У меня получился вот такой интерфейс: Сейчас мы создали простую галерею с одним заголовком и таблицей на 3 столбца.
В итоге получаем галерею на два уровня: И так можно наращивать уровни пока не надоест. Работа с TRibbonComboBoxПо своей сути компонент TRibbonComboBox ничем не отличается от своего дальнего родственника TComboBox за одним небольшим исключением - для того, чтобы сохранялся стиль оформления необходимо, чтобы каждый пункт (элемент) TRibbonComboBox представлялся в виде элемента коллекции TActionCliets. Как это сделать - см. первый пункт статьи про split-кнопки. В остальном TRibbonComboBox точно такой же как и TComboBox. Вот, например, на рисунке представлен RibbonComboBox с одним разделителем и тремя элементами для выбора. Меню: главное меню приложения, PopUp-менюПереходим, наконец, к разработке менюшек в стиле Ribbon. Главное меню приложенияВначале, коротко о главном, точнее о составе панели главного меню: Как видно из рисунка, кроме обычного набора элементов главного меню, в Ribbon дополнительно реализована ещё одна панель для размещения дополнительных команд или ссылок на открываемые документы, а также возможность добавления кнопок в нижнюю часть меню. Создадим свое собственное меню.
Вкладка свойств ApplicationMenu содержит следующие свойства:
Для того, чтобы изменить состав панели главного меню необходимо выбрать вкладку свойств: TRibbon -> ApplicationMenu -> Menu или выбрать в Object Inspector компонент TRibbonApplicationMenuBar. OptionItems - содержит набор действий для блока дополнительных кнопок меню RecentItems - набор действий для дополнительной панели главного меню. Можете потренироваться и создать, например для своего приложения кнопку выхода в главном меню, а также несколько команд в дополнительной панели. Создаются они обычным способом через редактор свойств. Здесь стоит заметить лишь то, что в отличие от ранее рассмотренных способов организации действий (split-кнопок, галерей и т.д.), действия в дополнительном меню и кнопки не содержат вложенныx свойств Items. Теперь разберемся с основными элементами главного меню. Корневые элементы (те которые видны при открытии меню) создаются также как и любые другие элементы на панелях Ribbon - простым перетаскиванием мышкой действий из ActionManager"а на свободное место панели. Несколько иначе обстоит дело в случае создания подменю. Для того, чтобы создать для какого-либо корневого элемента список команд с sub-menu необходимо:
Вот пример под-меню для одного из элементов главного меню: Как видно список дополнительных элементов содержит два компонента с типом csSeparator (разделитель) Кроме того, каждый пункт дополнительного меню содержит поясняющую подпись. Для того, чтобы сделать подобного рода подменю необходимо, чтобы каждый элемент коллекции TActionClients в списке имел следующие свойства:
Так же при разработке Application Menu следует учитывать следующее обстоятельство - размер панели для под-меню целиком и полностью соответствует размеры основной панели. То есть, если в основном меню у Вас содержится одно действие, то сколько бы элементов вы не вносили в подменю, в работающем приложение подменю будет размером точно в один элемент. PopUp-меню приложенияЗдесь все проще и, прочитав эту статью полностью, Вы без каких-либо проблем создадите popup-меню любой конфигурации и любой сложности. Единственно, что следует отметить, это то, что при разработке PopUp-меню необходимо использовать компоненты TPopUpActionBar. Для сохранения общего внешнего вида приложения, не забывайте также, что PopUpActionBar имеет свойство Style. Вместо заключенияСегодня мы продвинулись ещё на один шаг вперед в изучении Ribbon Controls и научились создавать такие элементы интерфейса как: split-кнопки, галереи, списки, главное меню и popup-меню. Что касается сложности разработки интерфейсов Ribbon, то на мой взгляд, основная сложность - это не запутаться во всех этих TAction, TActionClients, Items и т.д. Вообще, судя по тому, что я узнал за последние несколько дней про работу с Ribbon, можно сказать, что более-менее функциональный интерфейс можно разработать имею под рукой всего три компонента: TRibbon, TImageList и TActionManager. Естественно будут возникать такие ограничения как невозможность создания разных по размеру кнопок, галерей с большими элементами и т.д., но в уцелом интерфейс будет функциональным. Однако, я бы не стал рисковать и терять в удобстве разработки, экономя лишние пару десятков килобайт exe-файла. При разработке более-менее функциональных приложений с количеством элементов меню свыше 20 шт. все-таки желательно разделять действия: по группам и по различным компонентам ActionLists - получится на порядок удобнее. Ну, а пока Вы разрабатываете свои интерфейсы, я продолжу свои скромные шаги в направлении более глубокого изучения Ribbon Controls и попробую разобраться с Costumizer"ами и их руссификацией. Приложение, на основании которого написана данная статья, Вы можете скачать здесь Ссылки по теме
|
|