Продовжуємо порпатися в нетрях і хитросплетіннях Ribbon Controls. Сьогодні на порядку денному настройка Ribbon Controls для російськомовного населення плюс трохи креативу в плані створення своїх тем оформлення для Ribbon Controls.
Пригадується у кого-то з читачів блогу виникало питання "Як русифікувати меню Costumize Dialog?". Давайте розбиратися. Адже ні зі стелі падають рядки і вставляються самі в менюшку?
Найпростіший спосіб вирішення подібних питань - це зазирнути в папку
C: \ Program Files \ Embarcadero \ RAD Studio \ 7.0 \ lib \
і подивитися модуль з назвою, на зразок RibbonSrt або RibbonConst. Адже розробники повинні дотримуватися всіх правил написання програмного коду, в тому числі і уникати використання строкових і, по можливості, інших констант в тілах процедур і функцій. Відкриваємо папку і дійсно спостерігаємо там чудовий файлик RibbonConsts.dcu. Однойменний файл, але з розширенням * .pas знаходиться в папці
C: \ Program Files \ Embarcadero \ RAD Studio \ 7.0 \ source \ Win32 \ vcl \
Як бачите, все просто і не вимагає особливих програмістських здібностей. Тільки у мене користуватися перекладачем.
А тепер переходимо до питання, яким я, заради власного нездорового інтересу, зараз сиджу і займаюся на роботі (тільки б не прийшло начальство), а саме - зміна зовнішнього вигляду Ribbon. Або, говорячи більш зрозумілою мовою - створення власних тем оформлення для Ribbon Controls. Невпевнений, що зможу так ось відразу за кілька годин у всьому розібратися, та ще й розписати в блозі, але постараюся викласти якомога більше інформації, якщо що - сподіваюся на Вашу допомогу в освоєнні теми. Отже поїхали.
Почнемо вивчення теми з того, що найбільш просто - колірні схеми. У Delphi вже спочатку є три готових компонента для колірних схем:
- XPColorMap
- StanderdColorMap
- TwilightColorMap
Спробуємо застосувати їх на практиці. За логікою речей і, судячи з назви властивостей у компонентів, залежно від колірної схеми повинні змінюватися кольору шрифтів і тіні компонентів як мінімум. Перевіримо на практиці. Розміщуємо на формі, як зазвичай: ActionManager і Ribbon. Створюємо парочку Action в менеджері, у риббона створюємо один Tab і дві групи (а можна і одну - як Вам завгодно) і розміщуємо в групах наші Action "и.
Тепер кидаємо на форму простий ComboBox. всі три доступні колірні схеми і кнопку. У мене вийшла ось така непоказна формочка:
Тепер додаємо в ComboBox три рядки, кожна з яких буде описувати одну з колірних схем і в обробнику кліка по кнопці пишемо наступний код
Запускаємо програму і перевіряємо, що вийшло. Порадувало, що кольори шрифтів змінилися:
Чи не порадував глюк з панеллю швидкого запуску - зверніть на нього увагу. Причому як виявилося глюк цей не пропадає навіть якщо перезавантажити Delphi ... хоча це може тільки на робочій машинці глюк - вдома перевірю напевно. А поки продовжимо.
Зараз ми розглянули один з варіантів зміни колірної схеми - з використанням стандартних, вже довгий час існуючих компонентів колірних схем.
Але у Ribbon також є і свій тип TcustomRibbonColorMap в модулі Ribbon. Можна, та й мабуть, потрібно використовувати цей тип даних при роботі з колірними схемами Ribbon. Спробуємо застосувати його.
Після недовгих маніпуляцій з мишкою форма додатка прийняла такий вигляд:
Кожен з нових ColorBox буде описувати значення кольору для одного з властивостей TcustomRibbonColorMap.
Дописуючи обробник події кнопки:
І тепер можемо експериментувати з колірною схемою Ribbon скільки нашої душі завгодно, підбирати свої кольори шрифтів і т.д. Наприклад, я зібрав ось таку "тошнотно" схемку:
Тепер ми можемо на власні очі поглянути на бітмапами скрін Ribbon і сфабрикувати свій за образом і подобою. Файл важить не багато ні мало 1056kb тому заради ілюстрації я наведу стиснутий в gif і зменшений трохи за розміром малюнок. Ось він:
Так як я не дизайнер і в PhotoShop практично нічого не тямлю, то заради експерімнта я розфарбував трохи деякі області, щоб бачити що у мене вийшло завантажити свій скін в програму. Тепер приступаємо до фази №2 - пишемо свій модуль для завантаження скіна.
Ви звертали увагу, що після першої ж компіляції проекту з Ribbon в uses з'являється як мінімум один додатковий модуль RibbonLunaStyleActnCtrls. Ось такий же самий модуль ми і будемо писати.
Створюємо порожній модуль і даємо йому какое0нібудь гучне назву, наприклад: RibbonMegaStyleActnCtrls. Відразу в uses підключаємо три модуля: ActnMan, RibbonStyleActnCtrls і Ribbon. А також оголошуємо одну константу:
Якщо не влаштовує те, що скін буде лежати прямо поруч з виконуваним файлом - немає проблем, вкажіть свій шлях. А нам залишається тільки зареєструвати наш новий скін і вчасно його вивантажити. Не будемо знову ж винаходити велосипед (тим більше, що на швидку руку він може вийти далеко не з круглими колесами), а пишемо те ж саме, що і для стандартних скінів в секціях initialization і finalization:
Та й не забудьте перед implementation оголосити глобальну змінну:
Тепер підключаємо наш модуль в uses і в будь-якому зручному для вас обработчике пишемо:
Я додав ці рядки в обробник кнопки для застосування колірної схеми. Ось який вигляд прийняла моя програма після того як я познущався над скіном:
Моторошно негарно, але зате яскраво і відразу видно, що хтось навмисне спотворив Ribbon.
На сьогодні все. Як бонус до посту додається та сама програма, яку я писав по ходу справи роботи над статтею. В архіві з програмою ви знайдете також її вихідні коди, включаючи модулі RibbonConsts (з одного перекладеної рядком) і модулем тестового скіна, який, в разі чого, позбавить Вас від зайвої писанини - просто поміняєте шлях і назву файлу і скін готовий.