Проект Порталус


 

CompDocs on-line

Интернет-магазин постеров с доставкой

 
CompDocs
Вебмастеру
Программисту
Пользователю
Геймеру
Мабила
Новости
Отдохни
Беседка
Обои
Партнеры
Docs.com.ru

Web-мастеру:

PHP
ASP .NET
Perl
JavaScript
CSS
HTML
Раскрутка
Сервисы

Программисту:

DirectX
OpenGL
Pascal
Алгоритмы

Пользователю:

Windows
Linux
BIOS
Обои

Посетителю:

Форум
Юмор
Рассылки
Объявления
ФизМат
Тесты
Работа

Обои на рабочий стол
 

Автор: Вячеслав Джура
Источник: mycomp.com.ua

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

Как вы уже, наверное, заметили, приложения, созданные с помощью 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 http://msdn.microsoft.com/library/default.asp?url=/li....

Если вам этот способ показался неудобным, то чтобы лишний раз не сбивать пальцы о клавиатуру (и складывать руки в ожидании Delphi 7, в котором осуществили поддержку тем автоматически), можете воспользоваться прекрасным компонентом Theme Manager для Delphi (и Borland C++ Builder, соответственно). Автор компонента —Майк Лишке (Mike Lischke — кстати, спасибо ему за то, что разрешил написать статью о данном компоненте). Заходите к нему на сайт http://www.delphi-gems.com, Скачиваете оттуда комплект 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):

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

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

Ну, думаю, теперь точно хватит. Впрочем, если вы кое-что недопоняли, то разобраться вам поможет мой пример, в котором с левой стороны окна выводится синяя панель, аналогичная панели Проводника. Исходники программы можете взять здесь —http://www.i.com.ua/~hoaxer/mycomp/example_xp.zip. И в заключение еще пару слов о компоненте — он оказался настолько хорош и функционален, что Borland взяла именно его для поддержки тем в своих последующих продуктах (Delphi 7)...

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

Ссылки по теме:

  • Учебник по C++ Builder
  • Оптимизация приложений С++ в архитектуре клиент/сервер
  • Оформление класса в виде COM объекта в C++
  • Версия для печати Версия для печати [доступна только on-line]
    Комментарии к статье
    Ваше имя:

    Ваш e-mail:
      извещать о новых отзывах в теме
    публиковать мой e-mail
    Комментарий:

    Copyright © 2003-2004 Путяк Владислав.
    Использование материалов журнала разрешается только с указанием ссылки на первоисточники и сайт журнала - http://docs.com.ru



    @ portalus.ru