Programming: Статьи


Интерфейс в ХРерементальном стиле



  Автор: Вячеслав Джура

  Источник: ,

Как вы уже, наверное, заметили, приложения, созданные с помощью Delphi и C++ Builder не имеют поддержки тем новой ОС. Ваш рабочий стол и все такое выглядит красиво, стильно, а вот ваше приложение до сих пор мозолит глаза прямоугольными невыразительными кнопками Win9x/Me. Все это можно изменить, главное — дочитать эту статью до конца :-).

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

Теперь сохраните файл на жесткий диск в папку с приложением с именем имя_файла.exe.manifest (где имя файла — имя исполняемого модуля вашего приложения) и запустите программу — и вот она перед вами, только с контролами XP :-)! Вдаваться в подробности не буду, хочу лишь добавить, что этот «манифест» придется поставлять с приложением, или прикомпилировать его в качестве ресурса к исполняемому модулю (в .rc-файле должен быть текст типа 1 24 XPTheme.manifest). Впрочем, и тут есть свои нюансы (например, при использовании плагинов). Детальнее ознакомиться со всем этим вам поможет MSDN .

Если вам этот способ показался неудобным, то чтобы лишний раз не сбивать пальцы о клавиатуру (и складывать руки в ожидании Delphi 7, в котором осуществили поддержку тем автоматически), можете воспользоваться прекрасным компонентом Theme Manager для Delphi (и Borland C++ Builder, соответственно). Автор компонента —Майк Лишке (Mike Lischke — кстати, спасибо ему за то, что разрешил написать статью о данном компоненте). Заходите к нему на сайт , Скачиваете оттуда комплект Themes Manager, распаковываете и устанавливаете пакет ThemeManager.dpk, после чего у вас в палитре компонентов появится закладка XP с двумя новыми. Чтобы добавить в ваше приложение поддержку стилей, достаточно бросить TThemeManager на форму — и все (в некоторых случаях, если поддержка не работает, придется добавлять ресурс WinXp.res из папки с компонентом, но с такими ситуациями я пока не сталкивался). Откомпилируйте ваш продукт и проверьте — все окна приложения имеют красивые кнопки и контролы а ля XP. Но рано ставить точку — а вдруг любезный читатель захочет написать собственные контролы, используя красивые рамки и шрифты XP? Например, с левой стороны окна сделать панель, как у Проводника... Ну-с, приступим.

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

Откомпилируйте все это и посмотрите на результат. По краю PaintBox’a выводится красивая рамка с гладкими углами, аналогичная выводимой вокруг компонента ProgressBar. Теперь поясню код по строкам. В переменную Details мы присваиваем детали элемента tpBar (рамка вокруг индикатора прогресса). Затем средствами компонента менеджера тем мы выводим заданный в переменной элемент на канву PaintBox’a. Откуда брать названия элементов? Из файла ThemeSrv.pas или из программы Theme Explorer, созданной автором компонента (закачать ее вместе с исходным кодом вы можете с того же сайта). Откройте файл и поищите там то, что вас интересует. Например, вы наткнулись на такой участок кода:

Перед вами описывается стиль компонента Edit. Вам достаточно скопировать любое из его состояний и вставить в код GetElementDetails() — вместо рамки индикатора нарисуется рамка редактора текста. В этом файле (themeSrv.pas) можно найти описание TaskBar, StartMenu, ExplorerBar. Смотрите таблицу краткого пояснения (или воспользуйтесь Theme Explorer), чтобы быстрей найти компонент, который вам нужен.

И еще один важный момент — вывод текста в стиле выбранного компонента. Специально для этого я написал коротенькую процедуру, которая вызывается при перерисовке (в примере PaintBox’a):

Это приведет к тому, что наш текст будет выведен стилем надписи имени пользователя панели меню «Пуск». Вот сама процедура:

В ней нет ничего сложного, как и в прорисовке компонентов — попросту устанавливаете стиль и с помощью процедуры вывода текста выводите его :-).

Ну, думаю, теперь точно хватит. Впрочем, если вы кое-что недопоняли, то разобраться вам поможет мой пример, в котором с левой стороны окна выводится синяя панель, аналогичная панели Проводника. Исходники программы можете взять здесь —. И в заключение еще пару слов о компоненте — он оказался настолько хорош и функционален, что Borland взяла именно его для поддержки тем в своих последующих продуктах (Delphi 7)...

P.S. Если вы желаете присвоить стиль ХР другим программам автоматически, то существует программа XPSkins, в окне которой достаточно выбрать ехе-файл и нажать на кнопку установить\убрать стиль ХР (она автоматически создает «манифесты»). Закачать ее можно здесь: . По тому же адресу вы можете найти еще много других программ, связанных со стилем XP.







При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005