Помимо описанного способа создания и управления визуальными стилями разработчик может использовать функции Theme API, разработанные Microsoft для этих целей.

 

Для того чтобы использовать Theme API, можно стандартным способом подключить к проекту динамическую библиотеку Theme.dll:

Code:

var ThemeDLL: HINST;

...

begin

ThemeDLL := LoadLibrary('theme.dll');

if ThemeDLL <> 0 then

begin

...

end;

end;

Затем можно использовать возможности этого программного интерфейса напрямую. С деталями его реализации вы можете ознакомиться в документации Microsoft MSDN.

 

Однако можно поступить проще. В составе Delphi 7 имеется модуль Ux-Theme.pas, в котором как раз и реализованы возможности Theme API. Кроме этого, модуль Themes.pas содержит классы для основных элементов управления, которые могут использоваться при создании визуальных стилей, а также класс менеджера тем TThemeServices.

 

Так как детальное обсуждение возможностей Theme API выходит за рамки этой книги, в листинге 6.4 представлен схематичный пример использования функций этого программного интерфейса. Кроме того, как и все остальные API, работающие с GUI (Graphic User Interface) операционной системы, реальный код с использованием Theme API всегда перегружен многочисленными и ужасными на вид (а на самом деле вполне безобидными) функциями, рассчитывающими области вывода, неклиентские зоны оконных элементов и т. д.

 

Поэтому наш пример лишь показывает, как загрузить динамическую библиотеку theme.dll и получить ссылку на тему визуального стиля для текущего окна и кнопочного элемента управления.

 

Пример использования функций Theme API в Delphi 

Code:

var DC: HOC;

   CurrentThemeData: HTHEME;

begin

if UseThemes and InitThemeLibrary then

   try

     DC := GetWindowDC(Handle) ;

     try

       CurrentThemeData := OpenThemeData(0, 'button');

       CloseThemeData(CurrentThemeData); 

     finally

       ReleaseDC(Handle, DC); 

     end

   finally

     FreeThemeLibrary; 

   end

else

   ShowMessage('Приложение или операционная система не поддерживают использование Theme API');

end;

 

Функция

Code:

function UseThemes: Boolean;

проверяет способность операционной системы и приложения использовать Theme API.

 

Методы

Code:

function InitThemeLibrary: Boolean;

procedure FreeThemeLibrary;

соответственно инициализируют и выгружают библиотеку theme.dll.

 

Графический контекст ос наверняка понадобится при отрисовке элементов управления

 

Функция

Code:

OpenThemeData: function(hwnd: HWND; pszClassList: LPCWSTR): HTHEME; stdcall;

 

возвращает дескриптор темы для текущего визуального стиля и класса, имя которого представлено параметром pszdassList.

 

После того как тема загружена, можно использовать разнообразные графические функции, входящие в состав программного интерфейса.

 

При завершении работы не забудьте освободить занятые дескрипторы графического контекста и темы. Для темы используйте функцию

 

Code:

CloseThemeData: function(hTheme: HTHEME): HRESULT; stdcall;

 

 

 

Заинтересованный читатель найдет подробное описание нужных функций Theme API в Microsoft MSDN или же может полюбопытствовать содержимым модулей UxTheme.pas и Themes.pas.

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить