Как вы уже, наверное, заметили, приложения, созданные с
помощью 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
и все имена, ссылки авторов обязательны.