Стили и темы Windows
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 будет читать для того чтобы отрисовка компонентов производилось через новую библиотеку.
- Подробности
- Родительская категория: VCL
- Категория: Стили и темы Windows XP
Пример использования:
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
- Подробности
- Родительская категория: VCL
- Категория: Стили и темы Windows XP
Помимо описанного способа создания и управления визуальными стилями разработчик может использовать функции Theme API, разработанные Microsoft для этих целей.
Для того чтобы использовать Theme API, можно стандартным способом подключить к проекту динамическую библиотеку Theme.dll:
- Подробности
- Родительская категория: Стили и темы Windows XP
- Категория: Элементы управления Windows XP
Code: |
uses Themes; ... if ThemeServices.ThemesEnabled then // Тема использется |
- Подробности
- Родительская категория: VCL
- Категория: Стили и темы Windows XP
TActionManager является своего рода "командным пунктом", из которого должны управляться элементы управления приложения. Нас интересует только одно свойство этого компонента
Code: |
property Style: TActionBarStyle; |
- Подробности
- Родительская категория: Стили и темы Windows XP
- Категория: Элементы управления Windows XP
Темы должны быть включены и манифест лежать на форме:
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; stdcall; external '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
- Подробности
- Родительская категория: VCL
- Категория: Стили и темы Windows XP
Теперь давайте более подробно разберемся с визуальными стилями и их влиянием на пользовательский интерфейс приложений.
Начиная с операционной системы Widows 95 пользователям был доступен пакет обновления Microsoft Plus!, который позволял использовать темы оформления рабочего стола Windows. Темой называется совокупность настроек цветов, шрифтов, курсоров и прочих ресурсов, необходимых для создания унифицированного пользовательского интерфейса.
Все параметры одной темы сохраняются в файле с расширением theme в виде секций и значений, подобно файлам INI. Существующие темы доступны для выбора в системном диалоге Display Options.
Визуальные стили, интегрированные в Windows ХР, управляют внешним видом и поведением элементов управления. При этом визуальный стиль использует настройки параметров пользовательского интерфейса, заданные текущей темой. Для управления темами визуального стиля операционная система использует менеджер тем.
Визуальный стиль позволяет настраивать внешний вид элементов управления в целом и его составных частей. Правила и методы отрисовки сохраняются в файле с расширением mst, который входит в состав визуального стиля.
Совместно с Windows XP поставляется только один визуальный стиль, и он составляет приятное и свежее впечатление о пользовательском интерфейсе операционной системы.
- Подробности
- Родительская категория: Стили и темы Windows XP
- Категория: Элементы управления Windows XP
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; |
- Подробности
- Родительская категория: VCL
- Категория: Стили и темы Windows XP
Так как использование стандартного компонента TXPManifest требует настройки исходного манифеста Delphi для каждого проекта, было бы неплохо изыскать более удобный способ. В качестве альтернативы вы можете подключить манифест к файлу вашего проекта и по мере надобности редактировать его, не опасаясь, что ваша забывчивость может отразиться на версиях в манифестах других приложений.
Для начала необходимо создать исходный файл ресурса RC, включающий единственную строку:
1 24 "ХР.manifest"
где 1 — номер ресурса версии библиотеки ComCtl32.dll, а 24 — номер ресурса манифеста (нумерация соответствует заголовочным файлам, распространяемых Microsoft); "ХР.manifest" — имя файла с документом XML, содержащим манифест. Естественно, манифест нужно настроить в соответствии с потребностями вашего проекта.
Теперь нужно откомпилировать файл ресурса при помощи строчного компилятора-ресурсов \Delphi7\Bin\brcc32.exe и разместить его в папке проекта.
И последняя операция — добавьте в исходный код файла проекта директиву подключения ресурса манифеста:
Code: |
{$R xpmanifest.res} |
В результате при компиляции проекта манифест из ресурса будет добавлен в исполняемый файл приложения.
- Подробности
- Родительская категория: Стили и темы 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; |
- Подробности
- Родительская категория: VCL
- Категория: Стили и темы Windows XP
На странице Win32 Палитры компонентов Delphi 7 имеется компонент TXPManifest. Будучи добавленным в проект, он обеспечивает компиляцию манифеста Windows XP в исполняемый файл приложения. В качестве основы используется стандартный манифест Delphi для Windows XP, содержащийся в файле ресурсов Delphi7\Lib\WindowsXP.res:
- Подробности
- Родительская категория: Стили и темы Windows XP
- Категория: Элементы управления Windows XP
Страница 1 из 2