Приступая к работе

Автор перевода:
Меликян Арсен aka bugron
Специально для форума
Ru-Board.com

Прочитав статью, вы узнаете, как использовать визуальные стили ISSkin.
Оригинал статьи можете посмотреть здесь.

ШАГ Первый: Добавление ISSkin`а и DLL библиотек

Первое, что вам нужно сделать, это открыть скрипт, используя Inno Setup. Найдите раздел [Files] и добавьте ISSkin.dll и файл визуального стиля. Для данного примера мы будем использовать Office2007.cjstyles, который вы можете скачать с раздела "Скачать".

[Files]
; Добавляем ISSkin DLL, который используется в инсталляторах Inno Setup.
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Добавляем файл визуального стиля, в котором находятся нужные ресурсы для визуализации.
; Вы также можете использовать Microsoft Visual Styles (*.msstyles).
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

ШАГ Второй: Объявление API Функций

После добавления ISSkin`а и файла визуальных стилей в ваш установочный скрипт, следующее, что вам нужно сделать, это определить блок кода, который будет загружать ISSkin DLL и применять визуальный стиль (скин) для установки. Для этого вам сначала нужно будет найти секцию [Code] в скрипте. Если в скрипте эти функции не объявлены, добавьте следующий код в конец вашего скрипта.

Вам нужно импортировать API функции LoadSkin и UnloadSkin, с помощью которых визуальные стили будут загружаться и выгружаться. Вам также требуется импортировать API функцию ShowWindow, который будет вызван при закрытии инсталлятора, как раз перед выгружением визуальных стилей. Чтобы сделать это, вы можете использовать ключевые слова procedure и external как показано ниже, чтобы импортировать каждую используемую функцию.

[Code]
// Импортируем LoadSkin API из ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Импортируем UnloadSkin API из ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Импортируем ShowWindow Windows API из User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

ШАГ Третий: Добавление Функции InitializeSetup()

Нам нужно добавить функцию InitializeSetup(), которая вызывается при инициализации инсталлятора Inno Setup. Здесь мы поместим наш код, который загружает визуальный стиль (скин). Первый аргумент функции LoadSkin - это путь к файлу визуальных стилей, а второй - файл INI, определяющий цветовую схему, размер шрифта и т.д..

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

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Office2007.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
  Result := True;
end;

ШАГ Четвёртый: Добавление Функции DeinitializeSetup()

Последнее, что нам нужно сделать, это добавить функцию DeinitializeSetup(), которая вызывается при закрытии инсталлятора Inno Setup. Здесь мы поместим наш код, который выгружает визуальные стили (скин), прежде чем инсталлятор закроется.

procedure DeinitializeSetup();
begin
  // Скрываем окно до выгрузки скина, чтобы пользователь не увидел
  // окно инсталлятора без визуальных стилей до его закрытия.
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  Sleep(110);
  UnloadSkin();
end;