Theme API
Falk0ner, вс, 06/07/2008 - 15:34.
Затем можно использовать возможности этого программного интерфейса напрямую. С деталями его реализации вы можете ознакомиться в документации Microsoft MSDN.
Однако можно поступить проще. В составе Delphi 7 имеется модуль Ux-Theme.pas, в котором как раз и реализованы возможности . Кроме этого, модуль Themes.pas содержит классы для основных элементов управления, которые могут использоваться при создании визуальных стилей, а также класс менеджера тем TThemeServices.
Так как детальное обсуждение возможностей выходит за рамки этой книги, в листинге 6.4 представлен схематичный пример использования функций этого программного интерфейса. Кроме того, как и все остальные API, работающие с GUI (Graphic User Interface) операционной системы, реальный код с использованием всегда перегружен многочисленными и ужасными на вид (а на самом деле вполне безобидными) функциями, рассчитывающими области вывода, неклиентские зоны оконных элементов и т. д.
Поэтому наш пример лишь показывает, как загрузить динамическую библиотеку theme.dll и получить ссылку на тему визуального стиля для текущего окна и кнопочного элемента управления.
Пример использования функций в Delphi
Функция
проверяет способность операционной системы и приложения использовать .
Методы
соответственно инициализируют и выгружают библиотеку theme.dll.
Графический контекст ос наверняка понадобится при отрисовке элементов управления
Функция
возвращает дескриптор темы для текущего визуального стиля и класса, имя которого представлено параметром pszdassList.
После того как тема загружена, можно использовать разнообразные графические функции, входящие в состав программного интерфейса.
При завершении работы не забудьте освободить занятые дескрипторы графического контекста и темы. Для темы используйте функцию
Помимо описанного способа создания и управления визуальными стилями разработчик может использовать функции , разработанные Microsoft для этих целей.
Для того чтобы использовать , можно стандартным способом подключить к проекту динамическую библиотеку Theme.dll:
var ThemeDLL: HINST;
...
begin
ThemeDLL := LoadLibrary('theme.dll');
if ThemeDLL <> 0 then
begin
...
end;
end;
...
begin
ThemeDLL := LoadLibrary('theme.dll');
if ThemeDLL <> 0 then
begin
...
end;
end;
Затем можно использовать возможности этого программного интерфейса напрямую. С деталями его реализации вы можете ознакомиться в документации Microsoft MSDN.
Однако можно поступить проще. В составе Delphi 7 имеется модуль Ux-Theme.pas, в котором как раз и реализованы возможности . Кроме этого, модуль Themes.pas содержит классы для основных элементов управления, которые могут использоваться при создании визуальных стилей, а также класс менеджера тем TThemeServices.
Так как детальное обсуждение возможностей выходит за рамки этой книги, в листинге 6.4 представлен схематичный пример использования функций этого программного интерфейса. Кроме того, как и все остальные API, работающие с GUI (Graphic User Interface) операционной системы, реальный код с использованием всегда перегружен многочисленными и ужасными на вид (а на самом деле вполне безобидными) функциями, рассчитывающими области вывода, неклиентские зоны оконных элементов и т. д.
Поэтому наш пример лишь показывает, как загрузить динамическую библиотеку theme.dll и получить ссылку на тему визуального стиля для текущего окна и кнопочного элемента управления.
Пример использования функций в Delphi
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('Приложение или операционная система не поддерживают использование ');
end;
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('Приложение или операционная система не поддерживают использование ');
end;
Функция
function UseThemes: Boolean;
проверяет способность операционной системы и приложения использовать .
Методы
function InitThemeLibrary: Boolean;
procedure FreeThemeLibrary;
procedure FreeThemeLibrary;
соответственно инициализируют и выгружают библиотеку theme.dll.
Графический контекст ос наверняка понадобится при отрисовке элементов управления
Функция
OpenThemeData: function(hwnd: HWND; pszClassList: LPCWSTR): HTHEME; stdcall;
возвращает дескриптор темы для текущего визуального стиля и класса, имя которого представлено параметром pszdassList.
После того как тема загружена, можно использовать разнообразные графические функции, входящие в состав программного интерфейса.
При завершении работы не забудьте освободить занятые дескрипторы графического контекста и темы. Для темы используйте функцию
CloseThemeData: function(hTheme: HTHEME): HRESULT; stdcall;
Заинтересованный читатель найдет подробное описание нужных функций в Microsoft MSDN или же может полюбопытствовать содержимым модулей UxTheme.pas и Themes.pas.
Отправить комментарий