Delphi: Інтерфейс в XPерементальном стилі, Комерція, Різне, статті

Як ви вже, напевно, помітили, додатки, створені за допомогою Delphi і C++ Builder не мають підтримки тим нової ОС. Ваш робочий стіл і все таке виглядає красиво, стильно, а ось ваше додаток до цих пір муляє очі прямокутними невиразними кнопками Win9x/Me. Все це можна змінити, головне – дочитати цю статтю до кінця.

Спочатку підтримка тим ХР здійснюється через ComCtl32.dll версії 6, яка поставляється з цією ОС і не є redistributable (тобто перераспостраняемой), так що в WinMe вам не вдасться влаштувати підтримку візуальних тем, просто скопіювавши в неї бібліотеку з XP. Але повернемося до нашого завдання … Для того щоб організувати підтримку тим, потрібно використовувати так званий «маніфест» програми, написаний на XML (Extensible Markup Language). Итак, створюємо текстовий файл і набираємо в ньому наступне (попутно замінивши CompanyName … на ім’я програми та інші дані про нього):


<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
<assemblyIdentity
  version=”1.0.0.0″
  processorArchitecture=”X86″
  name=”CompanyName.ProductName.YourApplication”
  type=”win32″
/>
<description>Your application description here.</description>
<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type=”win32″
      name=”Microsoft.Windows.Common-Controls”
      version=”6.0.0.0″
      processorArchitecture=”X86″
      publicKeyToken=”6595b64144ccf1df”
      language=”*”
    />
  </dependentAssembly>
</dependency>
</assembly>
 
Тепер збережіть файл на жорсткий диск в папку з додатком з ім’ям імя_файла.exe.manifest (де ім’я файлу – ім’я виконуваного модуля вашого застосування) і запустіть програму – і ось вона перед вами, тільки з контролями XP :-)! Вдаватися в подробиці не буду, хочу лише додати, що цей «маніфест» доведеться поставляти з додатком, або прікомпіліровать його в якості ресурсу до виконуваного модулю (в. Rc-файлі повинен бути текст типу 24 січня XPTheme.manifest). Втім, і тут є свої нюанси (наприклад, при використанні плагінів).


Якщо вам цей спосіб видався незручним, то щоб зайвий раз не збивати пальці об клавіатуру (і складати руки в очікуванні Delphi 7, В якому здійснили підтримку тим автоматично), можете скористатися прекрасним компонентом Theme Manager для Delphi (і Borland C + + Builder, відповідно). Автор компонента – Майк Лішка (Mike Lischke – до речі, спасибі йому за те, що дозволив написати статтю про даний компоненті). Заходите до нього до сайту www.delphi-gems.com/, Завантажуєте звідти комплект Themes Manager, розпаковуєте і встановлюєте пакет ThemeManager.dpk, після чого у вас в палітрі компонентів з’явиться закладка XP з двома новими. Щоб додати в ваше додаток підтримку стилів, досить кинути TThemeManager на форму – і все (в деяких випадках, якщо підтримка не працює, доведеться додавати ресурс WinXp.res з папки з компонентом, але з такими ситуаціями я поки не стикався). Відкомпілюйте ваш продукт і перевірте – всі вікна програми мають гарні кнопки і контроли а ля XP. Але рано ставити крапку – а раптом любий читачу захоче написати власні контроли, використовуючи красиві рамки і шрифти XP? Наприклад, з лівого боку вікна зробити панель, як у Провідника … Ну-с, приступимо.


Компонент ThemeManager надає усе необхідне для малювання окремо кожного елемента ХР. Для прикладу ми намалюємо на тілі компонента PaintBox красиву рамку від ProgressBar’a. Для цього покладіть на форму компонент ThemeManager і PaintBox. В обробнику OnPaint PaintBox’a напишіть цей код:


var
 Details: TThemedElementDetails;
begin
Details := ThemeManager.ThemeServices.GetElementDetails(tpBar);
ThemeManager.ThemeServices.DrawElement(paintbox.Canvas.Handle, Details, paintbox.ClientRect);
end;
 
Відкомпілюйте все це і подивіться на результат. По краю PaintBox’a виводиться красива рамка з гладкими кутами, аналогічна виведеної навколо компонента ProgressBar. Тепер поясню код за рядками. У змінну Details ми присвоюємо деталі елемента tpBar (рамка навколо індикатора прогресу). Потім засобами компонента менеджера тим ми виводимо заданий у змінній елемент на канву PaintBox’a. Звідки брати назви елементів? З файлу ThemeSrv.pas або з програми Theme Explorer, створеної автором компонента (закачати її разом з початковим кодом ви можете з того ж сайту). Відкрийте файл і пошукайте там те, що вас цікавить. Наприклад, ви натрапили на таку ділянку коду:


 // “Edit” theme data
 TThemedEdit = (
  teEditDontCare, … );
 
Перед вами описується стиль компонента Edit. Вам достатньо скопіювати будь-яке з його станів і вставити в код GetElementDetails () – замість рамки індикатора намалюється рамка редактора тексту. У цьому файлі (ThemeSrv.pas) можна знайти опис TaskBar, StartMenu, ExplorerBar. Дивіться таблицю короткого пояснення (або скористайтесь Theme Explorer), щоб швидше знайти компонент, який вам потрібен.


І ще один важливий момент – виведення в стилі обраного компонента. Спеціально для цього я написав коротеньку процедуру, яка викликається при перемальовуванні (у прикладі PaintBox’a):


DrawXPStart_Text(PaintBox.Canvas,PaintBox.ClientRect,tspUserPane,-10,-55,”Super font, isn””t it?”);
 
Це призведе до того, що наш текст буде виведений стилем написи імені користувача панелі меню «Пуск». Ось сама процедура:


procedure TForm1.DrawXPStart_Text(Canvas: TCanvas; R: TRect;
 Element: TThemedStartPanel; dx, dy: integer; Text: string);
var
 Details: TThemedElementDetails;
begin
Details := ThemeManager.ThemeServices.GetElementDetails(Element);
InflateRect(R, dx, dy);
ThemeManager.ThemeServices.DrawText(Canvas.Handle, Details, Text, R, DT_VCENTER, 0);
end;
 
У ній немає нічого складного, як і в промальовуванні компонентів – просто встановлюєте стиль і за допомогою процедури виведення тексту виводите його.


Ну, думаю, тепер точно вистачить. Втім, якщо ви дещо недозрозуміли, то розібратися вам допоможе мій приклад, в якому з лівого боку вікна виводиться синя панель, аналогічна панелі Провідника. І на закінчення ще пару слів про компоненті – він виявився настільки гарний і функціональний, що Borland взяла саме його для підтримки тим у своїх наступних продуктах (Delphi 7) …


P.S. Якщо ви бажаєте привласнити стиль ХР іншим програмам автоматично, то існує програма XPSkins, у вікні якої досить вибрати ехе-файл і натиснути на кнопку установітьубрать стиль ХР (вона автоматично створює «маніфести»).

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*