Компоненти Ribbon в Delphi.
Сьогодні: -0 -0 -0
Зараз онлайн: На сайті -9 На IRC-каналі -2
Ribbon - тип інтерфейсу в додатках GUI, заснований на тулбарах, розділених табами. Останні програми, випущені компанією Microsoft, використовують цю форму інтерфейсу, головною частиною якої є модульна стрічка. Після випуску Microsoft Windows Vista і Office 2007 даний тип інтерфейсу користувача став досить популярний.
Використовуємо можливості Ribbon Controls у програмах Delphi
Вперше компонентиRibbon були включені до складу CodeGear RAD Studio 2009 (Delphi 2009) і викликали велику цікавість серед розробників.
Усього закладка містить п'ять компонентів:TRibbon,TRibbonComboBox,TRibbonSpinEdit,TRibbonScreenTipsManager таTRibbonScreenTipsPopup.
Відразу зверну увагу на те, що використовувати Ribbon Ви зможете тільки у зв'язці з компонентомActionManager зі сторінки Additional палітри компоентов. Так що, якщо Ви не маєте уявлення, як діє ActionManager – то Вам навряд чи вдасться реалізувати повноцінний інтерфейс, та й взагалі використовувати Ribbon Controls у своєму додатку.
Отже, відкриваємо Delphi і вкладаємо на форму такі компоненти:
- TActionManager з закладки Additional.
- TImageList зі сторінки Win32 – тут ми зберігатимемо всі зображення для панелі Ribbon.
- TRibbon зі сторінки Ribbon Controls – головний компонент роботи з Ribbon. Власне, він і реалізує підтримку Ribbon у Ваших додатках.
- Та й стандартний RichEdit.
У підсумку у Вас має вийти приблизно наступний вид майбутньої програми:

Тепер почнемо налаштування.
ВиділяємоTRibbon та у властивостіActionManager вказуємо ActionManager1.
За промовчанням Ribbon використовує тему оформленняLuna. Якщо Ви хочете змінити вигляд панелі інструментів, то можете зробити це змінюючи властивістьStyle. Усього можна використовувати 3 стандартні схеми: Luna, Obsidian та Silver.
Тепер змінимо властивістьCaption на щось інше, наприклад, назвемо нашу майбутню програму "WordPad 2009".
Переходимо до ActionManager. У властивості FileName вказуємо ім'я файлу, в якому будуть зберігатися налаштування користувача панелі. Якщо файл не вказати, то при роботі з програмою налаштування не збережуться і при кожному запуску панель інструментів вибудовуватиметься за замовчуванням.
В якості Images вибираємо наш ImageList1. Ви можете також вказати, де у вас будуть зберігатися картинки для неактивних кнопок тощо, але це вже додаткові "навороти", тому обмежимося одним ImageList'ом.
У компонента ImageList змінюємо властивості Height і Width на значення 32, а властивість DrawingStyle встановлюємо в ds Transparent. Завантажуємо в ImageList картинки, які Ви будете використовувати у додатку та переходимо знову до Ribbon.
Виділяємо Ribbon, тиснемо праву кнопку миші і в меню вибираємоAdd Tab - таким чином ми створили сторінкуRibbonPage1, тепер переходимо на цю сторінку, знову тиснемо праву кнопку та вибираємо в менюAdd Group - додаємоRibbonGroup1. Ось у RibbonGroup'и і додаються всі елементи керування. Як бачите ієрархія компонента досить проста. Тепер переходимо до RibbonPage1 і змінюємо властивість Caption на, наприклад, "Редактор", а RibbonGroup1 змінюємо на "Робота з текстом". Тепер подивіться на результат – чогось не вистачає? Звичайно не вистачаєнайголовнішого – кнопки меню. Щоб додати кнопку меню вибираємо Ribbon, тиснемо праву кнопку миші та в меню вибираємоAdd Application Menu. У результаті цих нехитрих дій у Вас має вийти приблизно таке:

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

Тут від нас потрібно змінити властивості:
- Caption – якщо ви хочете зробити свій підпис на кнопці.
- Налаштувати Dialog.
- ImageIndex – вказати картинку з ImageList.
- Hint – якщо хочете змінити підказку.
Тепер, щоб додати це на панель інструментів, просто схопіть його мишкою і перетягніть на RibbonGroup. Тепер оберіть у RibbonGroup цю дію і знайдіть у Object Inspector'e властивістьCommand Properties – Button Size і змініть його наbsLarge. Ось тепер наша кнопка виглядає справді як кнопка. Можете поекспериментувати з усіма властивостями - так Ви зможете легко навчитися вбудовувати в панель не тільки кнопки, а й чекбокси, комбобокси та інші елементи керування.
Тепер робимо подвійний клік на нашій кнопці і переходимо нарешті до програмування. Описуємо таку подію:
Ось і все, щопотрібно описати, щоб завантажити вміст файлу RichEdit. Аналогічно Ви можете налаштувати абсолютно будь-які дії, причому необов'язково стандартні.
І останнє, що хотілося б відзначити – це те, що ви можете використовувати на панелях TRibbon та стандартні елементи управління, наприклад, стандартний ComboBox, але при цьому може виникнути ряд проблем, які я розгляну нижче.
Проблеми при роботі з Ribbon Controls
Як то кажуть, і в цій бочці меду-таки знайшлася ложка дьогтю. Незважаючи на свою красу і функціональність, Ribbon Controls в Delphi поки що сируватий, я б навіть сказав дуже сируватий.
Наприклад, є ряд проблем при роботі з компонентами в Design-Time - іноді розміщені на закладці компоненти ні в яку не хочуть виділятися мишкою. Начебто руки не криві, тиснеш куди треба, а в Інспекторі з'являються властивості зовсім не того компонента чи Action'а. Але це дуже несуттєві проблемки, які, напевно, будуть виправлені в найближчому майбутньому.
Основна проблема з якою я зіткнувся полягає в тому, що при розміщенні на панелях великої кількості стандартних компонентів Ribbon раптом перестає геть-чисто реагувати на будь-які дії - видає помилку доступу до осередків пам'яті і вмирає, що в результаті призводить до перезавантаження Delphi. Причому перезавантаження відновлює роботу лише оболонки, а проект не оживає.
Також при написанні цієї статті натрапив на такий глюк - якщо ви переносите компоненти Ribbon з однієї форми на іншу, то Вам доведеться переналаштовувати всі дії по-новій. Може це і не глюк, а зроблено спеціально, щоб уникнути серйозніших проблем, але дуже не хотілося б переписувати по-нових, скажімо так, дій 50-60.
Майбутнє Ribbon Controls у Delphi
Незважаючи наряд відзначених мною недоліків, я все-таки залишаюся оптимістом і сподіваюся, що в новій версії RAD Studio всі ці недоліки та шорсткості будуть прибрані, а на їхньому місці з'являться нові компоненти з новими можливостями глюками.
Нині я використовую Ribbon Controls виключно з метою саморозвитку, тобто. не пишу програми "на замовлення" з використанням цих компонентів, т.к. не хотілося б пролітати з термінами здачі через прикрі непорозуміння під час роботи з компонентами.
Статті, схожі на тематику
Щоб вставити посилання на цю статтю на іншому сайті, використовуйте наступний HTML-код:
Посилання для форумів (BBCode):