Компоненти 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.

У підсумку у Вас має вийти приблизно наступний вид майбутньої програми:

delphi

Тепер почнемо налаштування.

Виділяємо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. У результаті цих нехитрих дій у Вас має вийти приблизно таке:

ribbon

Зауважте – ми ще не написали жодного рядка коду, тільки налаштовуємось на роботу.

Тепер налаштуємо вигляд кнопки меню. Для цього переходимо до компоненту 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):

Коментарі читачів до цієї статті