Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 17 августа 2009 в 05:07.
Категории: Компоненты Delphi.


Ribbon — тип интерфейса в GUI приложениях, основанный на тулбарах, разделенных табами. Последние приложения, выпущенные компанией Microsoft применяют эту форму интерфейса, главной частью которой является модульная лента. После выпуска Microsoft Windows Vista и Office 2007 данный тип пользовательского интерфейса стал довольно популярен.< ' ' >

Используем возможности Ribbon Controls в приложениях Delphi

Впервые компоненты Ribbon были включены в состав CodeGear RAD Studio 2009 (Delphi 2009) и вызвали большой интерес среди разработчиков. Не исключением стал и я. Однако, несмотря на интерес к этим компонентам, сегодня в Рунете не так уж и много ресурсов по Delphi затронули вопросы использования компонентов Ribbon в приложениях. Давайте ликвидируем этот досадный пробел в русской документации по Delphi и более пристально взглянем на закладку Ribbon Controls палитры компонентов RAD Studio 2009.

Ribbon Controls Всего закладка содержит пять компонентов: TRibbon, TRibbonComboBox, TRibbonSpinEdit, TRibbonScreenTipsManager и TRibbonScreenTipsPopup.

Сразу обращу Ваше внимание на то, что использовать Ribbon Вы сможете только в связке с компонентом  ActionManager со страницу Additional палитры компоентов. Так что, если Вы не имеете представления как действует ActionManager - то Вам врядли удасться реализовать полноценный интерфейс, да и вообще использовать Ribbon Controls в своем приложении.


Для того, чтобы разобраться с работой компонентов Ribbon я предлагаю Вам разработать простенькое приложение, например текстовый редактор наподобие WordPad'а.

Итак, открываем Delphi и укладываем на форму следующие компоненты:

  • TActionManager с закладки Additional;
  • TImageList со страницы Win32 - здесь мы будем хранить все изображения для панели Ribbon;
  • TRibbon со страницы Ribbon Controls - главный компонент для работы с Ribbon. Собственно он и реализует поддержку Ribbon в Ваших приложениях;
  • Ну и стандартный RichEdit.

В итоге у Вас должен получиться примерно следующий вид будущего приложения:

RibbonТеперь начнем настройку.

Выделяем TRibbon и в свойстве ActionManager указываем ActionManager1.

По умолчанию Ribbon использует тему оформления Luna. Если Вы хотите изменить внешний вид панели инструментов, то можете сделать это изменяя свойство Style. Всего можно использовать 3 стандартные схему: Luna, Obsidian и Silver.

Теперь изменим свойство Caption на, что-нибудь другое, например назовем нашу будущую программу "WordPad 2009".

Переходим к ActionManager. В свойстве FileName указываем имя файла, в котором будут храниться пользовательские настройки панели. Если файл не указывается, то при работе с программой настройки не сохраняться и при каждом запуске панель инструментов будет выстраиваться по умолчанию.

В свойстве Images выбираем наш ImageList1. Вы можете также указать где у вас будут храниться картинки для неактивных кнопок и пр., но это уже дополнительные "навороты", поэтому ограничимся одним ImageList'ом.

У компонента ImageList меняем свойства Height и Width на значение 32, а свойство DrawingStyle устанавливаем в dsTransperent. Загружаем в ImageList картинки, которые Вы будете использовать в приложении и переходим снова к Ribbon.

Выделяем Ribbon, жмем правую кнопку мыши и в меню выбираем "Add Tab" - таким образом мы создали страницу RibbonPage1, теперь переходим на эту страницу, снова жмем правую кнопку и выбираем в меню "Add Group" - добавляем RibbonGroup1. Вот в RibbonGroup'ы и добавляются все элементы управления. Как видите иерархия компонента довольна проста. Теперь переходим к RibbonPage1 и меняем свойство Caption на, например, "Редактор", а у RibbonGroup1 изменяем на "Работа с текстом". Теперь посмотрите на результат - чего-то не хватает? Конечно не хватает самого главного - кнопки меню. Чтобы добавить кнопку меню выбираем Ribbon, жмем правую кнопку мыши и в меню выбираем "Add Application Menu". В итоге этих нехитрых действий у Вас должно получиться примерно следующее:

Ribbon - внешний вид приложения Заметьте - мы ещё не написали ни одной строчки кода, только настраиваемся на работу :).

Теперь настроим вид кнопки меню. Для этого переходим к компоненту TRibbon и раскрываем группу свойств "Application Menu", находим там пункт "Icon" и загружаем любую картинку в формате *.ico. По желанию, можете изменить свойство "IconSize" на isLarge, isMedium или isSmall. Я оставил это свойство по умолчанию в значении isMedium. Теперь Наше приложение выглядит ещё более "представительно". Осталось самое интересное - настроить все действия. А здесь придётся таки обратить особое внимание на ActionManager.

Делаем двойной клик на ActionManager и в открывшемся окне переходим на вкладку "Actions" (Действия). Давайте для начала добавим одно из стандартных свойств, например, открытие файла. Для этого нажимаем на стрелку рядом с кнопкой "New Action" и в появившемся списке выбираем пункт "New Standart Action". В итоге Вы получите целый список стандартных действий, которые поддерживаются в ActionManager. Нам необходимо свойство из группы "File" под названием "TFileOpen". Выбираем свойство и жмем "Ok". Теперь в окне ActionManager'а выбираем появившуюся категорию "File" , а в списке "Actions" наше добавленное свойство, которое обозначено там по умолчанию как "Open...".  Все, что от нас сейчас требуется - настроить вид кнопки меню, отвечающей за выполнение этого действия и написать пару строк кода. Для этого переходим в Object Inspector, который, кстати сказать, должен сейчас у Вас выглядеть вот так:

Action ManagerЗдесь от нас требуется изменить свойства:

  • Caption - если вы хотите сделать свою подпись на кнопке.
  • Настроить Dialog
  • ImageIndex - указать картинку из ImageList
  • Hint - если хотите изменить подсказку

Теперь, чтобы добавить это действие на панель инструментов, просто схватите его мышкой и перетяните на RibbonGroup. Теперь выберите в RibbonGroup это действие и найдите в Object Inspector'e свойство "Command Properties - Button Size" и измените его на bsLarge. Вот теперь наша кнопка выглядит действительно как кнопка. Можете поэкспериментировать со всеми свойствами - так Вы сможете легко научиться встраивать в панель не только кнопки, но и чекбоксы, комбобоксы и прочие элементы управления.

Теперь делаем двойной клик на нашей кнопке и переходим наконец-то к программированию. Описываем следующее событие:

procedure TForm1.FileOpen1BeforeExecute(Sender: TObject);
begin
RichEdit1.Lines.LoadFromFile(FileOpen1.Dialog.FileName);
end;

Вот и все, что требуется описать, чтобы загрузить содержимое файла в RichEdit. Аналогичным образом Вы можете настроить абсолютно любые действия, причем необязательно стандартные.

И последнее, что хотелось бы отметить - это то, что вы можете использовать на панелях TRibbon и стандартные элементы управления, например стандартный ComboBox, но при этом может возникнуть ряд проблем, которые я рассмотрю ниже.

Проблемы при работе с Ribbon Controls.

Как говориться, и в этой бочке мёда нашлась таки ложка дёгтя. Несмотря на свою красоту и функциональность Ribbon Controls в Delphi пока ещё сыроват, я бы даже сказал очень сыроват.

Например, присутствует ряд проблем при работе с компоентами в Design-Time - иногда, размещенные на закладке компоненты ни в какую не хотят выделяться мышкой. Вроде руки не кривые, жмешь куда надо, а в Инспекторе появляются свойства совсем не того компонента или Action'а. Но это весьма несущественные проблемки, которые видимо будут исправлены в ближайшем будущем.

Основная проблема с которой я столкнулся заключается в том, что при размещении на панелях большого количества стандартных компонентов  Ribbon вдруг перестает напрочь реагировать на любые действия - выдает ошибку доступа к ячейкам памяти и умирает, что в итоге приводит к перезагрузке Delphi. Причём перезагрузка восстанавливает работу только оболочки, а проект так и не оживает.

Так же при написании этой статьи натолкнулся на такой глюк - если вы переносите компоненты Ribbon с одной формы на другую, то Вам придётся перенастраивать все действия по-новой. Может это и не глюк, а сделано специально во избежания более серьезных проблем, но уж очень не хотелось бы переписывать по-новой, скажем так, действий 50-60...

Будущее Ribbon Controls в Delphi.

Несмотря на ряд отмеченных мною недостатков, я все-таки остаюсь оптимистом и надеюсь, что в новой версии RAD Studio (которая не за горами) все эти недостаки и шероховатости будут убраны, а на их месте появятся новые компоненты с новыми глюками возможностями.

В настоящее время я использую Ribbon Controls исключительно в целях саморазвития, т.е. не пишу программы "под заказ" с использованием этих компонентов, т.к. не хотелось бы пролетать со сроками сдачи из-за досадных недоразумений при работе с компонентами, но в целом могу сказать, что после выхода RAD Studio 2010 я таки попробую написать программу, используя целиком Ribbon Controls.

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

Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (18)

WP_Cloudy
  • Paiseesoifs пишет:

    Надеюсь, остальные записи окажутся такими же интересными :)

  • vitek_tlt пишет:

    Почему то мышкой не перетаскивается

  • Vlad пишет:

    Это такая «фишка» Ribbon Controls — помогвет изучить устройство ActionManager’а :)

  • vitek_tlt пишет:

    Чё настраивать нада  :-)

  • vitek_tlt пишет:

    А еще  сам ribbon не раскрывается

  • Vlad пишет:

    Чтоб раскрылся размер формы надо больше ставить, а не оставлять как есть. Сейчас сходу точный минимальный размер не скаже…где-то 500 пикселов по ширине должно хватить заглаза

  • vitek_tlt пишет:

    Спасибо за помощь и извиняюсь за свою бездарность в свои 55 лет, начав изучать программирование. Сам я с компом на ты, все таки с 86 года начинал с ним общаться ввиде игрушек. Теперь вот это «Теперь выберите в RibbonGroup это действие и найдите в Object Inspector’e свойство “Command Properties – Button Size”» не получается не могу найти. :(

  • Aleksandr пишет:

    Извините конечно за такой нелепый вопрос, но, как устанавливать компоненты в D2010? До этого я использовал D7. Там с этим проблем не возникало.  Compile и Install в большинстве случаев. В D2010 при открытии  файло .dpk окно с предложением что то откомпилировать и проинсталировать даже не появляется. Может надо где то в настройках какую-нибудь галочку поставить )). Но я порывшись в настройках ничего не нашел. Буду очень признателен если кто подскажет.

  • Vlad пишет:

    Ну сами по себе Ribbon Controls уже есть в Delphi. А другие компоненты обычно ставятся с использованием bpl-файла или как я писал про Alpha Controls

  • Aleksandr пишет:

    Ну там у вас описан один из стандартных способов установки. Почему то у меня компоненты так не устанавливаются. Буду искать..

  • Vlad пишет:

    Так других способов вроде бы и нету…Project Meneger’ом пользуетесь? Может просто ошибка какая-нибудь выползает при установке?

  • Дмитрий пишет:

    Ребята я не могу не как понять почему, я вставляю иконки в главное меню а они не работают, я што только не перепробывал

  • Дмитрий пишет:

    Я статью это внемательно прочитал, все понятно но не как не выходит вставить картинки (изображения).

  • bambarmia пишет:

    vitek_tlt , не знаю актуально ли еще, но учиться никогда не поздно, поэтому ключевые моменты выделил на слайде :
    1) положить TRibbon на форму
    2) положить TActionManager на форму и сопоставить его с Ribbon’om
    3) правой кнопкой мыши на Ribbon и AddTab
    4) аналогично AddGroup на RibbonPage
    5) аналогично AddItem на Items с последующей настройкой свойства Action/New Action
    (либо 5) двойной щелчок на ActionManager1, там New Action и перетянуть Action1 на RibbonGroup1 )
    6) левой выделить Action
    7) там уже менять ButtonSize

  • bambarmia пишет:
  • vitek_tlt пишет:

    Спасибки конечно, Влад обещал посмотреть мои сохранения и отпечататься по обучению на Риббоне отдельным справочником или как там еще не знаю. Может человеку и некогда…ну да ладна

  • Maxx пишет:

    Ribbon не представил ни чего нового, в отличии от TMS-компонентов и вообще является его жалкой пародией… В TMS в вкладке «TMS menus» есть куда более расширенные контролы и поддержка тем куда серьёзнее, жаль что платный, но решительно даёт почву для размышлений.
    Ну а в целом статья полезна…

  • Vlad пишет:

    Знаете есть такая пословица «Любой каприз за Ваши деньги»? Я это к тому, что за $$$$ Вам могут соорудить такие контролы по сравнению с которыми и TMS покажется жалкой пародией на работу :) Просто Ribbon это, скажем так, «бюджетный» вариант для реализации ленточного интерфейса и не более. Отсюда и все вытекающие проблемы и отсутсвие фич

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник

   


Продажа красок: краска по дереву в Перми.