Code:

uses

Themes;

...

if ThemeServices.ThemesEnabled then // Тема использется

 

   
 

 

 

Code:

uses ComObj, SyncObjs;

 

var

GetCurrentThemeName: function (pszThemeFileName: LPWSTR; cchMaxNameChars: Integer;

   pszColorBuff: LPWSTR; cchMaxColorChars: Integer; pszSizeBuff: LPWSTR;

   cchMaxSizeChars: Integer): HRESULT; stdcall;

 

procedure TForm1.Button1Click(Sender: TObject);

var

FileName, ColorScheme, SizeName: WideString;

hThemeLib: THandle;

begin

try

   hThemeLib := LoadLibrary('uxtheme.dll');

   if hThemeLib > 0 then

     GetCurrentThemeName := GetProcAddress(hThemeLib, 'GetCurrentThemeName');

   if Assigned(GetCurrentThemeName) then

   begin

     SetLength(FileName, 255);

     SetLength(ColorScheme, 255);

     SetLength(SizeName, 255);

     OleCheck(GetCurrentThemeName(PWideChar(FileName), 255,

       PWideChar(ColorScheme), 255, PWideChar(SizeName), 255));

     // show the the theme path and file name.

     ShowMessage(PWideChar(FileName));

     // show the color scheme name

     ShowMessage(PWideChar(ColorScheme));

     // show the size name

     ShowMessage(PWideChar(SizeName));

   end;

finally

   FreeLibrary(hThemeLib);

end;

end;

 

 

В Delphi 7 впервые появилась возможность настраивать пользовательский интерфейс приложений для использования в Windows XP. Для этого в состав ресурсов приложения должен включаться манифест Windows XP. Это дополнение призвано обеспечить корректное взаимодействие элементов управления приложения с системной библиотекой ComCtl32.dll версии 6, используемой в Windows XP. Собственно все особенности работы приложений под управлением Windows XP вызваны именно появлением новой версии этой библиотеки. Впрочем, об этом подробно рассказывается ниже.

 

 

 

Code:

const

WM_THEMECHANGED = $031A;

 

type

TForm1 = class(TForm)

   {...}

private

public

   procedure WMTHEMECHANGED(var Msg: TMessage); message WM_THEMECHANGED;

end;

 

{...}

 

implementation

 

{...}

 

procedure TForm1.WMTHEMECHANGED(var Msg: TMessage);

begin

Label1.Caption := 'Theme changed';

Msg.Result := 0;

end;

 

 

 

Итак, начнем с манифеста. Он представляет собой документ в формате XML, содержащий всю информацию, необходимую для взаимодействия приложения и библиотеки ComCtl32.dll версии 6.

 

Примечание 

 

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

 

Темы должны быть включены и манифест лежать на форме:
 

Code:

unit Unit1;

{©Drkb v.3(2007): www.drkb.ru}

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, ComCtrls, XPMan;

 

 

type

TForm1 = class(TForm)

   Button1: TButton;

   Button2: TButton;

   Button3: TButton;

   Button4: TButton;

   Button5: TButton;

   XPManifest1: TXPManifest;

   procedure FormCreate(Sender: TObject);

private

   procedure Unload2Themes(var M:TMSG); message WM_USER+1;

public

   { Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

function SetWindowTheme(hwnd: HWND; pszSubAppName: LPCWSTR;

                       pszSubIdList: LPCWSTR): HRESULT; stdcallexternal 'uxtheme.dll';

 

 

procedure TForm1.Unload2Themes(var M: TMSG);

begin

SetWindowTheme(Button4.Handle, ' ', ' ');

SetWindowTheme(Button5.Handle, ' ', ' ');

SetWindowTheme(Form1.Handle, ' ', ' ');

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

PostMessage(Handle,WM_USER+1,0,0)

end;

 

end.

 

 

Автор: Krid

На странице Win32 Палитры компонентов Delphi 7 имеется компонент TXPManifest. Будучи добавленным в проект, он обеспечивает компиляцию манифеста Windows XP в исполняемый файл приложения. В качестве основы используется стандартный манифест Delphi для Windows XP, содержащийся в файле ресурсов Delphi7\Lib\WindowsXP.res:

 
Пример использования:

 

Code:

// bitmap

SetWindowLong(hwndButton,GWL_STYLE,GetWindowLong(hwndButton,GWL_STYLE) or BS_BITMAP);         

Button_SetImageEx(hwndButton,LoadBitmap(hInstance,'IDB_BITMAP1'),IMAGE_BITMAP);

 

// иконка

SetWindowLong(hwndButton,GWL_STYLE,GetWindowLong(hwndButton,GWL_STYLE) or BS_ICON);

Button_SetImageEx(hwndButton,LoadIcon(hInstance,'IDI_ICON1'),IMAGE_ICON);

 

 
Автор: Krid

 

Так как использование стандартного компонента TXPManifest требует настройки исходного манифеста Delphi для каждого проекта, было бы неплохо изыскать более удобный способ. В качестве альтернативы вы можете подключить манифест к файлу вашего проекта и по мере надобности редактировать его, не опасаясь, что ваша забывчивость может отразиться на версиях в манифестах других приложений.

 

Для начала необходимо создать исходный файл ресурса RC, включающий единственную строку:

 

1 24 "ХР.manifest"

 

где 1 номер ресурса версии библиотеки ComCtl32.dll, а 24 номер ресурса манифеста (нумерация соответствует заголовочным файлам, распространяемых Microsoft); "ХР.manifest" имя файла с документом XML, содержащим манифест. Естественно, манифест нужно настроить в соответствии с потребностями вашего проекта.

 

Теперь нужно откомпилировать файл ресурса при помощи строчного компилятора-ресурсов \Delphi7\Bin\brcc32.exe и разместить его в папке проекта.

 

И последняя операция добавьте в исходный код файла проекта директиву подключения ресурса манифеста:

Code:

{$R xpmanifest.res}

 

 

 

В результате при компиляции проекта манифест из ресурса будет добавлен в исполняемый файл приложения.

 

 

 

Windows XP манифест в Delphi

 

Delphi.Diagnostinc.Ru

Данная статья рассказывает о том как сделать чтобы ваши проекты выглядели как Windows XP программы.

Зачем?

В Windows XP есть менеджер тем (theme manager) который изменяет вид большинства стандартных объектов Windows. Misrosoft утверждает что старые версии библиотеки comctl32.dll содержат код для поддержки различных платформ семейства Windows. Microsoft разумно решила почистить содержимое comctl32.dll для улучшения работы тем в Windows XP. Теперь получается что существует две версии библиотеки: старая (версия 5.8) которая имеет обратную совместимость всех предыдущих версий Windows (в том числе и XP) и новую версию (версия 6) которая совместима только с XP (ну и следующими версиями Windows).

По умолчанию все программы разработанные под Windows XO используют версию 5.8, получая тот же вид что и предыдущие приложения Windows. Для того чтобы использовать компоненты из библиотеки 6 версии в вашем приложении вы должны подключить к вашему приложению Manifest который Windows будет читать для того чтобы отрисовка компонентов производилось через новую библиотеку.

Теперь давайте более подробно разберемся с визуальными стилями и их влиянием на пользовательский интерфейс приложений.

 

Начиная с операционной системы Widows 95 пользователям был доступен пакет обновления Microsoft Plus!, который позволял использовать темы оформления рабочего стола Windows. Темой называется совокупность настроек цветов, шрифтов, курсоров и прочих ресурсов, необходимых для создания унифицированного пользовательского интерфейса.

 

Все параметры одной темы сохраняются в файле с расширением theme в виде секций и значений, подобно файлам INI. Существующие темы доступны для выбора в системном диалоге Display Options.

 

Визуальные стили, интегрированные в Windows ХР, управляют внешним видом и поведением элементов управления. При этом визуальный стиль использует настройки параметров пользовательского интерфейса, заданные текущей темой. Для управления темами визуального стиля операционная система использует менеджер тем.

 

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

 

Совместно с Windows XP поставляется только один визуальный стиль, и он составляет приятное и свежее впечатление о пользовательском интерфейсе операционной системы.