Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Diawer
Дата сообщения: 12.08.2008 18:38
Люди, ведь для многих это наверняка простая задача, я пробовал разобраться, здесь такая задача, вторая страница для Task`а уже есть (где идёт выбор файла), я присвоил первой и второй Page – соответственно Page1 и Page2, но это ни чего обсалютно не дает, поскольку надо добавить страницу только для

[Tasks]
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы:

,и что бы она шла
1.    обязательно после стандартной страницы “Выбора дополнительных задач”
2.    !!!! затем если стоит галочка, то идёт дальше выбор “Выбор зарегистрированного файла”, если нет то это пропускается
,то есть надо добавить страницу между имеющимися.
Вот в этом [more=коде] [Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: physx; Description: Установить AGEIA PhysX (обязательно); GroupDescription: Программны необходимые для корректной работы игры:
Name: adberdr; Description: Установить Adobe Reader; GroupDescription: Программны необходимые для корректной работы игры:; Flags: unchecked
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы:

[_Code]
var
Page: TInputFileWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputFilePage(wpSelectTasks,
'Регистрация игры', 'Указать расположение файла регистрации игры?',
'Выберите расположение файла регистрации игры, после этого' #13 'нажмите "Далее":');
Page.Add('Выбор файла регистрации...', 'Legend.exe|Legend.exe', 'Legend.exe');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) and IsTaskSelected('askini') then
begin
ForceDirectories(ExpandConstant('{app}\'));
FileCopy(Page.Values[0], ExpandConstant('{app}\')+ ExtractFileName(Page.Values[0]), False);
end;
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if (CurPage = Page.ID) and not FileExists(Page.Values[0]) then
Result:= False;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not IsTaskSelected('askini') then
Result:= True;
end;

[Run]
FileName: {drive:{src}}\AdbeRdr\AdbeRdr81.exe; WorkingDir: {drive:{src}}\AdbeRdr; Tasks: adberdr; Flags: skipifsilent waituntilidle
FileName: {drive:{src}}\PhysX\PhysX709.exe; WorkingDir: {drive:{src}}\PhysX; Tasks: physx; Flags: skipifsilent waituntilidle [/more]

Автор: Genri
Дата сообщения: 12.08.2008 19:40
Diawer -- [more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: physx; Description: Установить AGEIA PhysX (обязательно); GroupDescription: Программны необходимые для корректной работы игры:
Name: adberdr; Description: Установить Adobe Reader; GroupDescription: Программны необходимые для корректной работы игры:; Flags: unchecked

[_Code]
var
Page: TInputFileWizardPage;
Page1: TInputOptionWizardPage;

procedure InitializeWizard();
begin
Page1 := CreateInputOptionPage(wpSelectTasks,
'License Information', 'Are you a registered user?',
'If you are a registered user, please check the box below, then click Next.',
False, False);
Page1.Add('I am a registered user');

Page := CreateInputFilePage(Page1.ID,
'Регистрация игры', 'Указать расположение файла регистрации игры?',
'Выберите расположение файла регистрации игры, после этого' #13 'нажмите "Далее":');
Page.Add('Выбор файла регистрации...', 'Legend.exe|Legend.exe', 'Legend.exe');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) and Page1.Values[0] then
begin
ForceDirectories(ExpandConstant('{app}\'));
FileCopy(Page.Values[0], ExpandConstant('{app}\')+ ExtractFileName(Page.Values[0]), False);
end;
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if (CurPage = Page.ID) and not FileExists(Page.Values[0]) then
Result:= False;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not Page1.Values[0] then
Result:= True;
end;

[Run]
FileName: {drive:{src}}\AdbeRdr\AdbeRdr81.exe; WorkingDir: {drive:{src}}\AdbeRdr; Tasks: adberdr; Flags: skipifsilent waituntilidle
FileName: {drive:{src}}\PhysX\PhysX709.exe; WorkingDir: {drive:{src}}\PhysX; Tasks: physx; Flags: skipifsilent waituntilidle
[/more]
Процедура InitializeWizard исправлена.
Автор: allalone
Дата сообщения: 12.08.2008 22:12
Подскажи, как удалить раздел реестра при инсталяции ?
И как установить разрешени только чтения для опредленной ветки реестра ?
Автор: Genri
Дата сообщения: 12.08.2008 22:32
allalone -- ну во-первых, удалять целый раздел я бы не советовал (если только речь не идет об инно-инсталляторе виндовс). Вероятно, речть идет о параметре или ветке.
Во-вторых, если абсолютно все будут иметь доступ к ветке только для чтения, то и удалить ее никто никогда не сможет. Вероятно, речь идет о задании прав доступа к ветке для определенной категории или группы пользователей.
Ответы на эти вопросы даны в хелпе в разделе Setup Script Sections - [Registry] section.
Автор: allalone
Дата сообщения: 12.08.2008 23:30
О ветке. Нужно удалить все ее вложенные параметры и ключи и запретить туда что-то записывать
Пример не подкините ?
Автор: Shift7
Дата сообщения: 13.08.2008 04:58
SotM
Спасибо огромное - все чики пики
Автор: KurtWagner
Дата сообщения: 13.08.2008 05:00
Почему этот скрипт не работает! Срабатывает только если стоит 2007 год а если поставить 2008 не запускаеться вообше!

[Setup]
AppName=DateTimeStop
AppVerName=DateTimeStop
Uninstallable=false
UpdateUninstallLogAppName=false
DisableDirPage=true
DisableProgramGroupPage=true
DefaultDirName={pf}\DateTimeStop
DisableStartupPrompt=true
OutputDir=.

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Messages]
BeveledLabel=- "DateTimeStop" Copyright (c) K.W.N.

[_ISToolPreCompile]
#dim M[64]        ;Add language files (Messages, License, InfoBefore, InfoAfter)
    #define TimeLimit '2007:12:31'

[Code]
type TSystemTime = record wYear, wMonth, wDayOfWeek, wDay, wHour, wMinute, wSecond, wMilliseconds: word; end;

procedure GetLocalTime(var lpSystemTime: TSystemTime); external 'GetLocalTime@kernel32 stdcall delayload';
function SystemTimeToFileTime(const lpTime: TSystemTime; var lpFileTime: TFileTime): Boolean; external 'SystemTimeToFileTime@kernel32 stdcall delayload';
function CompareFileTime(const lpFileTime1, lpFileTime2: TFileTime): LongInt; external 'CompareFileTime@kernel32 stdcall delayload';

#ifdef TimeLimit
Function TimeLimit: Boolean; var lt, dateLimit: TSystemTime; LocalTime, LimitTime: TFileTime;
    Begin
#for {M[0] = 59; Pos(':', TimeLimit); M[0]++} M[M[0]] = Int(Copy(TimeLimit,,Pos(':', TimeLimit)-1)), TimeLimit = Copy(TimeLimit,Pos(':', TimeLimit)+1)
#expr M[M[0]] = TimeLimit
    dateLimit.wYear:= {#Int(M[59])}; dateLimit.wMonth:= {#Int(M[60])}; dateLimit.wDay:= {#Int(M[61])}; dateLimit.wHour:= {#Int(M[62])}; dateLimit.wMinute:= {#Int(M[63])};
    GetLocalTime(lt); SystemTimeToFileTime(lt, LocalTime); SystemTimeToFileTime(dateLimit, LimitTime)
    Result:= not(CompareFileTime(LimitTime, LocalTime) = -1)
End;
#endif
function InitializeSetup: Boolean;
begin
if not TimeLimit then MsgBox('Внимание! Вы исчерпали лимит времени.', mbError, MB_OK)
end;
Автор: htuos
Дата сообщения: 13.08.2008 08:34
KurtWagner

Цитата:
Почему этот скрипт не работает! Срабатывает только если стоит 2007 год а если поставить 2008 не запускаеться вообше!

странный вопрос какой-то

Код: #define TimeLimit '2007:12:31'
Автор: Genri
Дата сообщения: 13.08.2008 09:06
KurtWagner
Цитата:
Срабатывает только если стоит 2007 год а если поставить 2008 не запускаеться вообше!

function InitializeSetup: Boolean;
begin
if not TimeLimit then MsgBox('Внимание! Вы исчерпали лимит времени.', mbError, MB_OK)
end;

-- ...т.е. если лимит времени вышел, то будет сообщение, а инсталлятор не запустится, так как не выставлено Result:= True
Если лимит времени не вышел, то сообщения не будет, но инсталлятор все-равно не запустится, так как опять нет Result:= True
Автор: nOobCrafter
Дата сообщения: 13.08.2008 10:01
Вопрос по поводу скинов. Вот как то поднимали тему
Цитата:
Новые скины для Inno Setup с использованием библиотеки: http://isskin.codejock.com/
Дальше доходило до того что

Цитата:
Темы под Windows (*.msstyles) тоже можно использовать.

Но вот примеров что то нигде невидел, может кто кинуть 1-2.. А то очень хоца норм скин прикрукрутить со своей страничкой.
Автор: htuos
Дата сообщения: 13.08.2008 17:39
Genri глянь личку
Автор: Victor_Dobrov
Дата сообщения: 14.08.2008 13:07
KurtWagner - твоя переделка моего TimeLimit не совсем удачна. Диалог 'Вы исчерпали лимит времени' мало что объясняет.

Выводить это сообщение правильнее при нажатии кнопки 'Далее' (Next). Ведь пользователю надо показать титульную страницу инсталлятора, чтобы он узнал, что и откуда ему обновлять и лимит какой программы исчерпан.

nOobCrafter - [more=использование]
[Setup]
AppName=ISSkin Example
AppVerName=ISSkin Example v1.0
DefaultDirName={pf}\ISSkin

[Files]
Source: ISSkin.dll; DestDir: {app}

[Code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';

function InitializeSetup(): Boolean;
begin
    LoadSkin(ExpandConstant('{win}\Resources\Themes\Luna\Luna.msstyles'), 'NormalBlue.ini');
    Result:= True;
end;
[/more] msstyles-файлов ничем не отличается от cjstyles, нужно только правильно указать ini-файл.
Автор: nOobCrafter
Дата сообщения: 14.08.2008 14:40
Victor_Dobrov А где этот ини файл взять? Кстати скрипт что то ничего не меняет(((
Автор: Diawer
Дата сообщения: 14.08.2008 19:41
Genri, спасибо огромное.
Автор: ComradG
Дата сообщения: 14.08.2008 21:13
Если кому интересно сообщаю - CompiledCode.bin ничто иное, как псевдо бинарик, убрав дамп с котрого, получается удобочитаемый скрипт формата iss. Чем дампить? Спрашивайте Genri, я для него идиот, а что может идиот?

Добавлено:
Кстати, лично для тебя Genri - твой трабл я решил вообще с помощью батника!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Автор: Artem_Butenko
Дата сообщения: 14.08.2008 23:09
Товарищи, пожалуйста не нарушайте конструктивный диалог. Ведь это форум друзей, не стоит бросаться в крайности и оскорблять друг друга. Если кто-то знает больше (ComradG), поделитесь своими знаниями, другие люди будут очень благодарны. К Вашему вопросу ComradG о полной имитации страницы выбора компонентов установки, аналогичной NSIS, скажу одно, в Delphi можно пересобрать ресурсные файлы Inno Setup, добавив возможность включения новых контролов (тем более, что исходный код Inno Setup - открытый). Только вот проблема - необходимость замены оригинальных файлов Inno Setup. Если у Вас есть соображения по этому поводу, поделитесь, думаю многим это будет интересно.
Автор: htuos
Дата сообщения: 14.08.2008 23:13
ComradG
выложи батник, посмотреть охота, если ты про zip-архивы

кстати может подскажешь - как найти окно известного потока и скрыть это окно?


Добавлено:
Artem_Butenko

Цитата:
о полной имитации страницы выбора компонентов установки, аналогичной NSIS

а можно хотя бы картинку увидеть, как это в NSIS выглядит. что там такого особенного?
Автор: Genri
Дата сообщения: 14.08.2008 23:48
ComradG

Цитата:
я для него идиот
-- во-первых, не надо приписывать мне того, что я не говорил. В будущем, можешь утверждать, что я говорил о завышенном самомнении и славолюбии (одно "знаю виндовс как свои пять" чего стоит). Но не более того.
Во-вторых, утверждений что ты сделал что-то "крутое", было едва ли не больше, чем всего твоих постов (даже в твоем последнем посте таких утверждений аж два). Но ни одного примера. Приведешь действительно полезный для всех пример - принесу публичные извинения. До этого - останусь при своем мнении.
Ну и в третьих, у меня "траблов" нет. И печень меня не беспокоит (С)

ЗЫ. Надеюсь за оффтоп простят.

htuos -- мелькает. Athlon 64 3000+ Скрипт подробно не разбирал.
Автор: htuos
Дата сообщения: 15.08.2008 00:37
Genri

Цитата:
мелькает

по идее так и должно быть, зря я надеялся на лучшее
может тогда не скрывать это окно, а "облагородить" его. убрать кнопку "отмена", залочить "Х" (закрыть окно), заголовок сменить и т.д., чтобы не рушить замыслы автора инсталлятора

правда Alt+F4 никто не отменял, чтобы и это запретить понадобится все та же innocallback.dll , но все же это наверное лучше чем ничего
Автор: Victor_Dobrov
Дата сообщения: 15.08.2008 01:41
nOobCrafter
Цитата:
А где этот ини файл взять?

В файлах тем, ресурс TextFile (например в Luna.msstyles их 9), нужный ini указывается вторым параметром, например:
LoadSkin(ExpandConstant('Luna.msstyles'), 'NormalBlue.ini');
LoadSkin(ExpandConstant('Luna\Luna.msstyles'), 'NormalMetallic.ini');
LoadSkin(ExpandConstant('Luna\Luna.msstyles'), 'ExtraLargeBlue.ini');
остальные: ExtraLargeHomestead.ini, ExtraLargeMetallic.ini, LargefontsBlue.ini, LargefontsHomestead.ini, LargefontsMetallic.ini, NormalHomestead.ini

Цитата:
Кстати скрипт что то ничего не меняет(((

Для окна инсталлятора в примере устанавливается стандартная Луна, можно выбрать другую тему, прописав другой ini-файл.
Автор: nOobCrafter
Дата сообщения: 15.08.2008 09:54
Victor_Dobrov вопрос совсем для чайников, а чем этот "*.msstyles" открывать что бы посмотреть код?...
Решил проявить смекалку и полазил по нету, и вуяля! все заработало! ))) ля ля ля.. Спасибо! Кстати если кому надо то етсь хорошая прога Resource Tuner с пом которой мона все открыть, правда шареваре) но весит 2 метра)
Автор: SergeyLS
Дата сообщения: 15.08.2008 15:12
Приветствую!

А не подскажет ли кто-нибудь алгоритм, как сделать при инсталляции в папку с базой данных файла: dat.dbа так, чтобы если в папке уже есть файл: dat.dbа то вновь добавляемый файл стал dat.d00, а следующий dat.d +nn где n=следующий по счету номер?
Или я слишком многого хочу от инсталлятора?

Спасибо и пока!
С благодарностью жду помощи.
Автор: nOobCrafter
Дата сообщения: 15.08.2008 16:21
В хелп есть такой вариант. = Запуск/остановку службы в самом простом виде можно реализовать примерно так (здесь стоп/старт службы Windows Time). Использовать надо не имя службы, а выводимое имя.


Код: var
res: integer;

function InitializeSetup(): Boolean;
begin
Exec('net', 'stop "Windows Time"', '', SW_HIDE, ewWaitUntilTerminated, res);
Result:= True;
end;

procedure DeinitializeSetup();
begin
Exec('net', 'start "Windows Time"', '', SW_HIDE, ewWaitUntilTerminated, res);
end;
Автор: ComradG
Дата сообщения: 15.08.2008 21:06

Цитата:
Приведешь действительно полезный для всех пример - принесу публичные извинения

Да, ну.
htuos

Цитата:
выложи батник, посмотреть охота, если ты про zip-архивы

Про них и говорил. А батник я уже заливал на narod.ru

Цитата:
К Вашему вопросу ComradG о полной имитации страницы выбора компонентов установки, аналогичной NSIS, скажу одно, в Delphi можно пересобрать ресурсные файлы Inno Setup

Ничего пересобирать не надо - дописываю скрипт, оказывается еще что-то помню. Допишу, выложу.


Добавлено:

Цитата:
а можно хотя бы картинку увидеть, как это в NSIS выглядит. что там такого особенного?

htuos
Смотри http://nsis.sourceforge.net/Screenshots
Автор: Ph9M2
Дата сообщения: 15.08.2008 21:58
ComradG

Так чем дампить CompiledCode.bin?
Автор: ComradG
Дата сообщения: 15.08.2008 22:24
Если это псевдо бинарик, то чем обычно такие штуки дампят?
Автор: Ph9M2
Дата сообщения: 15.08.2008 22:38
ComradG

Понятия не имею
Автор: Genri
Дата сообщения: 15.08.2008 23:42
SergeyLS

Цитата:
Или я слишком многого хочу от инсталлятора?
-- в принципе много, но инно может еще больше [more]
Код: [no]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Files]
Source: dat.dbа; DestDir: {app}; DestName: {code:SetFileName}

[Code]
function SetFileName(Param: String): String;
var
i: integer;
begin
i:= 0;
if not FileExists(ExpandConstant('{app}\dat.dbа')) then
Result:= 'dat.dbа'
else
begin
while FileExists(ExpandConstant('{app}\') + Format('dat.d%.2d', [i])) do
i:= i+1;
Result := Format('dat.d%.2d', [i]);
end;
end;[/no]
Автор: CyberEsper
Дата сообщения: 16.08.2008 00:42
Здравствуйте уважаемые помощники, я очень ценю, вашу поддержку пользователям одним из которых я являюсь. Я решил сделать программу установки для игры Morrowind, что бы собрать все лучшее в одном.
В игре присутствуют официальные дополнения, все включенные (Задействованные) вписаны в .INI файл, программой которая встроена в “Loader” Morrowind`а в “root” папке с игрой, я сделал пять разных копий этого .INI файла с разными настройками, и теперь хочу сделать следующие:
В программе установки должно быть новое окно после установки игры, наверное тут “wpFinished” с вопросом и пятью вариантами ответов в виде радио кнопок, при выборе одного из вариантов и нажатия на кнопку Finish, определенный .INI файл с настройками должен распаковываться в папку с уже установленной игрой. Сложности подбавляет не только то что я не знаю как пользоваться RadioButton`ами, а то, что я использую пример из “Inno Setup Scripting v5.1”, там другая логика алгоритма, (Надеюсь, правильно выразился) так как там другое оформление программы установки, называется пример“iss”.

Вот код, который нужно поправить:
[more=Код программы установки]
;Сообщение : Вы проходили Morrowind с оф. дополнениями или без?
;1 - Я проходил(а) Morrowind и готов(а) начать проходить Bloodmoon
;2 - Я проходил(а) Morrowind и готов(а) начать проходить Tribunal
;3 - Я проходил(а) Morrowind и Tribunal
;4 - Я проходил(а) Morrowind и Bloodmoon
;5 - Я не проходил(а) Morrowind

[Setup]
AppName=The Elder Scrolls 3
AppVerName=The Elder Scrolls 3 1C
AppPublisher=Bethesda
AppPublisherURL=http://www.elderscrolls.com/
AppSupportURL=http://www.elderscrolls.com/
AppUpdatesURL=http://www.elderscrolls.com/
DefaultDirName={pf}\The Elder Scrolls 3
DefaultGroupName=The Elder Scrolls 3
DisableProgramGroupPage=yes
OutputDir=D:\
OutputBaseFilename=setup
SetupIconFile=D:\Library\MORROWIND\In Game\Other\Icons\Morrowind Icons XP\Icons\Morrowind Floppy 1.ico
Compression=none
SolidCompression=no
WizardImageFile=D:\Library\MORROWIND\Setup\Morrowind.bmp
WizardSmallImageFile=D:\Library\MORROWIND\Setup\Morrowind.bmp

[LangOptions]
LanguageName=english
LanguageID=$0409
LanguageCodePage=0
DialogFontName=Tahoma
DialogFontSize=8

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: D:\Library\MORROWIND\Setup\button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\Library\MORROWIND\Setup\Morrowind.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\Library\MORROWIND\Setup\Arrow.cur; DestDir: "{tmp}"; Flags: dontcopy
Source: D:\Library\MORROWIND\Setup\Hand.cur; DestDir: "{tmp}"; Flags: dontcopy

;Source: "D:\Games\The Elder Scrolls 3\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\{cm:ProgramOnTheWeb,The Elder Scrolls 3}"; Filename: "http://www.elderscrolls.com/"
Name: "{group}\{cm:UninstallProgram,The Elder Scrolls 3}"; Filename: "{uninstallexe}"

[Code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

BASS_MUSIC_RAMP = 1;
BASS_MUSIC_RAMPS = 2;
BASS_MUSIC_LOOP = 4;
BASS_MUSIC_FT2MOD = 16;
BASS_MUSIC_PT1MOD = 32;
BASS_MUSIC_SURROUND     = 512;
BASS_MUSIC_SURROUND2     = 1024;

GCL_HCURSOR = (-12);
OCR_NORMAL = 32512;


function LoadCursorFromFile(FileName: String): Longint;
external 'LoadCursorFromFileA@user32 stdcall';

function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint;
external 'SetClassLongA@user32 stdcall';

function SetCursor(Cursor: Longint): Longint;
external 'SetCursor@user32 stdcall';

function SetSystemCursor(Cursor, CurType: Longint): Longint;
external 'SetSystemCursor@user32 stdcall';

function GetCursor(): Longint;
external 'GetCursor@user32 stdcall';

Var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

WizardImage: TBitmapImage;
YesRadio,NoRadio: TRadioButton;
WelcomeLabel1,WelcomeLabel2,LicenseLabel1,LicenseAcceptedLabel,LicenseNotAcceptedLabel,PasswordLabel,PasswordEditLabel,
InfoBeforeClickLabel,UserInfoNameLabel,UserInfoOrgLabel,UserInfoSerialLabel,SelectDirLabel,SelectDirBrowseLabel,DiskSpaceLabel,
SelectComponentsLabel,ComponentsDiskSpaceLabel,SelectStartMenuFolderLabel,SelectStartMenuFolderBrowseLabel,NoIconsLabel,
SelectTasksLabel,ReadyLabel,StatusLabel,InfoAfterClickLabel,FinishedHeadingLabel,FinishedLabel,YesRadioLabel,NoRadioLabel,
BeveledLabel: TLabel;
CheckBox: TCheckBox;
CheckBoxLabel: Tlabel;
ResultCode: Integer;

OldCursor, NewCursor, NewCursor1: Longint;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=15 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clYellow //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

Procedure NoIconsLabelOnClick (Sender: TObject);
begin
WizardForm.NoIconsCheck.Checked:=Not(WizardForm.NoIconsCheck.Checked)
end;

Procedure YesRadioOnClick (Sender: TObject);
begin
WizardForm.YesRadio.Checked:=True
end;

Procedure NoRadioOnClick (Sender: TObject);
begin
WizardForm.NoRadio.Checked:=True
end;

Procedure HideAll();
begin
WizardForm.Bevel.Hide
WizardForm.Bevel1.Hide
WizardForm.MainPanel.Hide
WizardForm.BeveledLabel.Hide
WizardForm.OuterNotebook.Hide
WizardForm.InnerNotebook.Hide

WelcomeLabel1.Hide
WelcomeLabel2.Hide
LicenseLabel1.Hide
WizardForm.LicenseMemo.Hide
WizardForm.LicenseAcceptedRadio.Hide
LicenseAcceptedLabel.Hide
WizardForm.LicenseNotAcceptedRadio.Hide
LicenseNotAcceptedLabel.Hide
PasswordLabel.Hide
PasswordEditLabel.Hide
WizardForm.PasswordEdit.Hide
InfoBeforeClickLabel.Hide
WizardForm.InfoBeforeMemo.Hide
UserInfoNameLabel.Hide
WizardForm.UserInfoNameEdit.Hide
UserInfoOrgLabel.Hide
WizardForm.UserInfoOrgEdit.Hide
UserInfoSerialLabel.Hide
WizardForm.UserInfoSerialEdit.Hide
SelectDirLabel.Hide
SelectDirBrowseLabel.Hide
WizardForm.DirEdit.Hide
WizardForm.DirBrowseButton.Hide
DiskSpaceLabel.Hide
SelectComponentsLabel.Hide
WizardForm.TypesCombo.Hide
WizardForm.ComponentsList.Hide
ComponentsDiskSpaceLabel.Hide
SelectStartMenuFolderLabel.Hide
SelectStartMenuFolderBrowseLabel.Hide
WizardForm.GroupEdit.Hide
WizardForm.GroupBrowseButton.Hide
WizardForm.NoIconsCheck.Hide
NoIconsLabel.Hide
SelectTasksLabel.Hide
WizardForm.TasksList.Hide
ReadyLabel.Hide
WizardForm.ReadyMemo.Hide
StatusLabel.Hide
WizardForm.ProgressGauge.Hide
InfoAfterClickLabel.Hide
WizardForm.InfoAfterMemo.Hide
FinishedHeadingLabel.Hide
FinishedLabel.Hide

WizardForm.RunList.Hide

YesRadio.Hide
YesRadioLabel.Hide
NoRadio.Hide
NoRadioLabel.Hide
end;

Procedure InitializeSkin();
begin
ExtractTemporaryFile('Morrowind.bmp')

WizardImage:=TBitmapImage.Create(WizardForm)
WizardImage.AutoSize:=True
WizardImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Morrowind.bmp'))
WizardImage.Parent:=WizardForm

WizardForm.ClientWidth:=690
WizardForm.ClientHeight:=496
WizardForm.Font.Color:=$ffffff
WizardForm.Center

WizardForm.BackButton.Left:=293
WizardForm.BackButton.Top:=462
WizardForm.BackButton.Width:=80
WizardForm.BackButton.Height:=23

WizardForm.NextButton.Left:=375
WizardForm.NextButton.Top:=462
WizardForm.NextButton.Width:=80
WizardForm.NextButton.Height:=23

WizardForm.CancelButton.Left:=600
WizardForm.CancelButton.Top:=462
WizardForm.CancelButton.Width:=80
WizardForm.CancelButton.Height:=23

BeveledLabel:=TLabel.Create(WizardForm)
BeveledLabel.Left:=10
BeveledLabel.Top:=468
BeveledLabel.Font.Color:=clWhite
BeveledLabel.Transparent:=True
BeveledLabel.Caption:=WizardForm.BeveledLabel.Caption
BeveledLabel.Parent:=WizardForm

WizardForm.BeveledLabel.Left:=700

// wpWelcome
WelcomeLabel1:=TLabel.Create(WizardForm)
WelcomeLabel1.Left:=205
WelcomeLabel1.Top:=90
WelcomeLabel1.Width:=465
WelcomeLabel1.Height:=28
WelcomeLabel1.AutoSize:=False
WelcomeLabel1.WordWrap:=True
WelcomeLabel1.Transparent:=True
WelcomeLabel1.Font.Color:=$ffffff
WelcomeLabel1.Font.Style:=[fsBold]
WelcomeLabel1.Caption:=WizardForm.WelcomeLabel1.Caption
WelcomeLabel1.Parent:=WizardForm

WelcomeLabel2:=TLabel.Create(WizardForm)
WelcomeLabel2.Left:=205
WelcomeLabel2.Top:=130
WelcomeLabel2.Width:=465
WelcomeLabel2.Height:=200
WelcomeLabel2.AutoSize:=False
WelcomeLabel2.WordWrap:=True
WelcomeLabel2.Transparent:=True
WelcomeLabel2.Caption:=WizardForm.WelcomeLabel2.Caption
WelcomeLabel2.Parent:=WizardForm

// wpLicense
LicenseLabel1:=TLabel.Create(WizardForm)
LicenseLabel1.Left:=205
LicenseLabel1.Top:=90
LicenseLabel1.Width:=465
LicenseLabel1.Height:=28
LicenseLabel1.AutoSize:=False
LicenseLabel1.WordWrap:=True
LicenseLabel1.Transparent:=True
LicenseLabel1.Caption:=WizardForm.LicenseLabel1.Caption
LicenseLabel1.Parent:=WizardForm

WizardForm.LicenseMemo.Left:=205
WizardForm.LicenseMemo.Top:=128
WizardForm.LicenseMemo.Width:=465
WizardForm.LicenseMemo.Height:=266
WizardForm.LicenseMemo.Parent:=WizardForm

WizardForm.LicenseAcceptedRadio.Left:=205
WizardForm.LicenseAcceptedRadio.Top:=405
WizardForm.LicenseAcceptedRadio.Width:=14
WizardForm.LicenseAcceptedRadio.Height:=14
WizardForm.LicenseAcceptedRadio.Color:=clBlack
WizardForm.LicenseAcceptedRadio.Parent:=WizardForm

LicenseAcceptedLabel:=TLabel.Create(WizardForm)
LicenseAcceptedLabel.Left:=221
LicenseAcceptedLabel.Top:=405
LicenseAcceptedLabel.Transparent:=True
LicenseAcceptedLabel.Caption:=WizardForm.LicenseAcceptedRadio.Caption

LicenseAcceptedLabel.Parent:=WizardForm

WizardForm.LicenseNotAcceptedRadio.Left:=205
WizardForm.LicenseNotAcceptedRadio.Top:=425
WizardForm.LicenseNotAcceptedRadio.Width:=14
WizardForm.LicenseNotAcceptedRadio.Height:=14
WizardForm.LicenseNotAcceptedRadio.Color:=clBlack
WizardForm.LicenseNotAcceptedRadio.Parent:=WizardForm

LicenseNotAcceptedLabel:=TLabel.Create(WizardForm)
LicenseNotAcceptedLabel.Left:=221
LicenseNotAcceptedLabel.Top:=425
LicenseNotAcceptedLabel.Transparent:=True
LicenseNotAcceptedLabel.Caption:=WizardForm.LicenseNotAcceptedRadio.Caption

LicenseNotAcceptedLabel.Parent:=WizardForm

// wpPassword
PasswordLabel:=TLabel.Create(WizardForm)
PasswordLabel.Left:=205
PasswordLabel.Top:=90
PasswordLabel.Width:=465
PasswordLabel.Height:=28
PasswordLabel.AutoSize:=False
PasswordLabel.WordWrap:=True
PasswordLabel.Transparent:=True
PasswordLabel.Caption:=WizardForm.PasswordLabel.Caption
PasswordLabel.Parent:=WizardForm

PasswordEditLabel:=TLabel.Create(WizardForm)
PasswordEditLabel.Left:=205
PasswordEditLabel.Top:=124
PasswordEditLabel.Transparent:=True
PasswordEditLabel.Caption:=WizardForm.PasswordEditLabel.Caption
PasswordEditLabel.Parent:=WizardForm

WizardForm.PasswordEdit.Left:=205
WizardForm.PasswordEdit.Top:=140
WizardForm.PasswordEdit.Width:=465
WizardForm.PasswordEdit.Height:=21
WizardForm.PasswordEdit.Color:=$000000
WizardForm.PasswordEdit.Font.Color:=$ffffff
WizardForm.PasswordEdit.Parent:= WizardForm

// wpInfoBefore
InfoBeforeClickLabel:=TLabel.Create(WizardForm)
InfoBeforeClickLabel.Left:=205
InfoBeforeClickLabel.Top:=90
InfoBeforeClickLabel.Transparent:=True
InfoBeforeClickLabel.Caption:=WizardForm.InfoBeforeClickLabel.Caption
InfoBeforeClickLabel.Parent:=WizardForm

WizardForm.InfoBeforeMemo.Left:=205
WizardForm.InfoBeforeMemo.Top:=114
WizardForm.InfoBeforeMemo.Width:=465
WizardForm.InfoBeforeMemo.Height:=300
WizardForm.InfoBeforeMemo.Parent:= WizardForm

// wpUserInfo
UserInfoNameLabel:=TLabel.Create(WizardForm)
UserInfoNameLabel.Left:=205
UserInfoNameLabel.Top:=90
UserInfoNameLabel.Transparent:=True
UserInfoNameLabel.Caption:=WizardForm.UserInfoNameLabel.Caption
UserInfoNameLabel.Parent:=WizardForm

WizardForm.UserInfoNameEdit.Left:=205
WizardForm.UserInfoNameEdit.Top:=106
WizardForm.UserInfoNameEdit.Width:=465
WizardForm.UserInfoNameEdit.Height:=21
WizardForm.UserInfoNameEdit.Parent:= WizardForm

UserInfoOrgLabel:=TLabel.Create(WizardForm)
UserInfoOrgLabel.Left:=205
UserInfoOrgLabel.Top:=142
UserInfoOrgLabel.Transparent:=True
UserInfoOrgLabel.Caption:=WizardForm.UserInfoOrgLabel.Caption
UserInfoOrgLabel.Parent:=WizardForm

WizardForm.UserInfoOrgEdit.Left:=205
WizardForm.UserInfoOrgEdit.Top:=158
WizardForm.UserInfoOrgEdit.Width:=465
WizardForm.UserInfoOrgEdit.Height:=21
WizardForm.UserInfoOrgEdit.Color:=$000000
WizardForm.UserInfoOrgEdit.Font.Color:=$ffffff
WizardForm.UserInfoOrgEdit.Parent:= WizardForm

UserInfoSerialLabel:=TLabel.Create(WizardForm)
UserInfoSerialLabel.Left:=205
UserInfoSerialLabel.Top:=194
UserInfoSerialLabel.Transparent:=True
UserInfoSerialLabel.Caption:=WizardForm.UserInfoSerialLabel.Caption
UserInfoSerialLabel.Parent:=WizardForm

WizardForm.UserInfoSerialEdit.Left:=205
WizardForm.UserInfoSerialEdit.Top:=210
WizardForm.UserInfoSerialEdit.Width:=465
WizardForm.UserInfoSerialEdit.Height:=21
WizardForm.UserInfoSerialEdit.Color:=$000000
WizardForm.UserInfoSerialEdit.Font.Color:=$ffffff
WizardForm.UserInfoSerialEdit.Parent:= WizardForm

// wpSelectDir
SelectDirLabel:=TLabel.Create(WizardForm)
SelectDirLabel.Left:=205
SelectDirLabel.Top:=90
SelectDirLabel.Width:=465
SelectDirLabel.Height:=28
SelectDirLabel.AutoSize:=False
SelectDirLabel.WordWrap:=True
SelectDirLabel.Transparent:=True
SelectDirLabel.Caption:=WizardForm.SelectDirLabel.Caption
SelectDirLabel.Parent:=WizardForm

SelectDirBrowseLabel:=TLabel.Create(WizardForm)
SelectDirBrowseLabel.Left:=205
SelectDirBrowseLabel.Top:=120
SelectDirBrowseLabel.Width:=465
SelectDirBrowseLabel.Height:=28
SelectDirBrowseLabel.AutoSize:=False
SelectDirBrowseLabel.WordWrap:=True
SelectDirBrowseLabel.Transparent:=True
SelectDirBrowseLabel.Caption:=WizardForm.SelectDirBrowseLabel.Caption
SelectDirBrowseLabel.Parent:=WizardForm

WizardForm.DirEdit.Left:=205
WizardForm.DirEdit.Top:=380
WizardForm.DirEdit.Width:=370
WizardForm.DirEdit.Height:=21
WizardForm.DirEdit.Color:=$000000
WizardForm.DirEdit.Font.Color:=$ffffff
WizardForm.DirEdit.Parent:= WizardForm


WizardForm.DirBrowseButton.Width:=80
WizardForm.DirBrowseButton.Height:=23
WizardForm.DirBrowseButton.Parent:= WizardForm

DiskSpaceLabel:=TLabel.Create(WizardForm)
DiskSpaceLabel.Left:=205
DiskSpaceLabel.Top:=415
DiskSpaceLabel.Transparent:=True
DiskSpaceLabel.Caption:=WizardForm.DiskSpaceLabel.Caption
DiskSpaceLabel.Parent:=WizardForm

// wpSelectComponents
SelectComponentsLabel:=TLabel.Create(WizardForm)
SelectComponentsLabel.Left:=205
SelectComponentsLabel.Top:=90
SelectComponentsLabel.Width:=465
SelectComponentsLabel.Height:=42
SelectComponentsLabel.AutoSize:=False
SelectComponentsLabel.WordWrap:=True
SelectComponentsLabel.Transparent:=True
SelectComponentsLabel.Caption:=WizardForm.SelectComponentsLabel.Caption
SelectComponentsLabel.Parent:=WizardForm

WizardForm.TypesCombo.Left:=205
WizardForm.TypesCombo.Top:=134
WizardForm.TypesCombo.Width:=465
WizardForm.TypesCombo.Height:=21
WizardForm.TypesCombo.Color:=$000000
WizardForm.TypesCombo.Font.Color:=$ffffff
WizardForm.TypesCombo.Parent:= WizardForm

WizardForm.ComponentsList.Left:=205
WizardForm.ComponentsList.Top:=158
WizardForm.ComponentsList.Width:=465
WizardForm.ComponentsList.Height:=243
WizardForm.ComponentsList.Color:=$000000
WizardForm.ComponentsList.Font.Color:=$ffffff
WizardForm.ComponentsList.Parent:= WizardForm

ComponentsDiskSpaceLabel:=TLabel.Create(WizardForm)
ComponentsDiskSpaceLabel.Left:=205
ComponentsDiskSpaceLabel.Top:=415
ComponentsDiskSpaceLabel.Transparent:=True
ComponentsDiskSpaceLabel.Caption:=WizardForm.ComponentsDiskSpaceLabel.Caption
ComponentsDiskSpaceLabel.Parent:=WizardForm

// wpSelectProgramGroup
SelectStartMenuFolderLabel:=TLabel.Create(WizardForm)
SelectStartMenuFolderLabel.Left:=205
SelectStartMenuFolderLabel.Top:=90
SelectStartMenuFolderLabel.Width:=465
SelectStartMenuFolderLabel.Height:=28
SelectStartMenuFolderLabel.AutoSize:=False
SelectStartMenuFolderLabel.WordWrap:=True
SelectStartMenuFolderLabel.Transparent:=True
SelectStartMenuFolderLabel.Caption:=WizardForm.SelectStartMenuFolderLabel.Caption
SelectStartMenuFolderLabel.Parent:=WizardForm

SelectStartMenuFolderBrowseLabel:=TLabel.Create(WizardForm)
SelectStartMenuFolderBrowseLabel.Left:=205
SelectStartMenuFolderBrowseLabel.Top:=120
SelectStartMenuFolderBrowseLabel.Width:=465
SelectStartMenuFolderBrowseLabel.Height:=28
SelectStartMenuFolderBrowseLabel.AutoSize:=False
SelectStartMenuFolderBrowseLabel.WordWrap:=True
SelectStartMenuFolderBrowseLabel.Transparent:=True
SelectStartMenuFolderBrowseLabel.Caption:=WizardForm.SelectStartMenuFolderBrowseLabel.Caption
SelectStartMenuFolderBrowseLabel.Parent:=WizardForm

WizardForm.GroupEdit.Left:=205
WizardForm.GroupEdit.Top:=380
WizardForm.GroupEdit.Width:=370
WizardForm.GroupEdit.Height:=21
WizardForm.GroupEdit.Color:=$000000
WizardForm.GroupEdit.Font.Color:=$ffffff
WizardForm.GroupEdit.Parent:= WizardForm

WizardForm.GroupBrowseButton.Left:=378
WizardForm.GroupBrowseButton.Top:=288
WizardForm.GroupBrowseButton.Width:=80
WizardForm.GroupBrowseButton.Height:=23
WizardForm.GroupBrowseButton.Parent:= WizardForm

WizardForm.NoIconsCheck.Left:=205
WizardForm.NoIconsCheck.Top:=415
WizardForm.NoIconsCheck.Width:=13
WizardForm.NoIconsCheck.Height:=13
WizardForm.NoIconsCheck.Visible:=True
WizardForm.NoIconsCheck.Parent:= WizardForm

NoIconsLabel:=TLabel.Create(WizardForm)
NoIconsLabel.Left:=221
NoIconsLabel.Top:=415
NoIconsLabel.Transparent:=True
NoIconsLabel.OnClick:= @NoIconsLabelOnClick
NoIconsLabel.Caption:=WizardForm.NoIconsCheck.Caption
NoIconsLabel.Parent:=WizardForm

// wpSelectTasks
SelectTasksLabel:=TLabel.Create(WizardForm)
SelectTasksLabel.Left:=205
SelectTasksLabel.Top:=90
SelectTasksLabel.Width:=465
SelectTasksLabel.Height:=28
SelectTasksLabel.AutoSize:=False
SelectTasksLabel.WordWrap:=True
SelectTasksLabel.Transparent:=True
SelectTasksLabel.Caption:=WizardForm.SelectTasksLabel.Caption
SelectTasksLabel.Parent:=WizardForm

WizardForm.TasksList.Left:=205
WizardForm.TasksList.Top:=124
WizardForm.TasksList.Width:=465
WizardForm.TasksList.Height:=300
WizardForm.TasksList.Color:=$000000
WizardForm.TasksList.Font.Color:=$ffffff
WizardForm.TasksList.Parent:= WizardForm

// wpReady
ReadyLabel:=TLabel.Create(WizardForm)
ReadyLabel.Left:=205
ReadyLabel.Top:=90
ReadyLabel.Width:=465
ReadyLabel.Height:=28
ReadyLabel.AutoSize:=False
ReadyLabel.WordWrap:=True
ReadyLabel.Transparent:=True
ReadyLabel.Parent:=WizardForm

WizardForm.ReadyMemo.Left:=205
WizardForm.ReadyMemo.Top:=124
WizardForm.ReadyMemo.Width:=465
WizardForm.ReadyMemo.Height:=300
WizardForm.ReadyMemo.Color:=$000000
WizardForm.ReadyMemo.Font.Color:=$ffffff
WizardForm.ReadyMemo.Parent:= WizardForm

// wpInstalling
StatusLabel:=TLabel.Create(WizardForm)
StatusLabel.Left:=205
StatusLabel.Top:=90
StatusLabel.Transparent:=True
StatusLabel.Caption:=WizardForm.Caption +'...'
StatusLabel.Parent:=WizardForm

WizardForm.ProgressGauge.Left:=205
WizardForm.ProgressGauge.Top:=120
WizardForm.ProgressGauge.Width:=465
WizardForm.ProgressGauge.Height:=21
WizardForm.ProgressGauge.Parent:= WizardForm

// wpInfoAfter
InfoAfterClickLabel:=TLabel.Create(WizardForm)
InfoAfterClickLabel.Left:=205
InfoAfterClickLabel.Top:=90
InfoAfterClickLabel.Transparent:=True
InfoAfterClickLabel.Caption:=WizardForm.InfoAfterClickLabel.Caption
InfoAfterClickLabel.Parent:=WizardForm

WizardForm.InfoAfterMemo.Left:=205
WizardForm.InfoAfterMemo.Top:=124
WizardForm.InfoAfterMemo.Width:=465
WizardForm.InfoAfterMemo.Height:=300
WizardForm.InfoAfterMemo.Parent:= WizardForm

// wpFinished
FinishedHeadingLabel:=TLabel.Create(WizardForm)
FinishedHeadingLabel.Left:=205
FinishedHeadingLabel.Top:=90
FinishedHeadingLabel.Width:=465
FinishedHeadingLabel.Height:=28
FinishedHeadingLabel.AutoSize:=False
FinishedHeadingLabel.WordWrap:=True
FinishedHeadingLabel.Transparent:=True
FinishedHeadingLabel.Font.Color:=$ffffff
FinishedHeadingLabel.Font.Style:=[fsBold]
FinishedHeadingLabel.Caption:=WizardForm.FinishedHeadingLabel.Caption
FinishedHeadingLabel.Parent:=WizardForm

FinishedLabel:=TLabel.Create(WizardForm)
FinishedLabel.Left:=205
FinishedLabel.Top:=130
FinishedLabel.Width:=465
FinishedLabel.Height:=56
FinishedLabel.AutoSize:=False
FinishedLabel.WordWrap:=True
FinishedLabel.Transparent:=True
FinishedLabel.Caption:=WizardForm.FinishedLabel.Caption
FinishedLabel.Parent:=WizardForm

WizardForm.RunList.Left:=0
WizardForm.RunList.Top:=200
WizardForm.RunList.Width:=465
WizardForm.RunList.Height:=120
WizardForm.RunList.Color:=$000000
WizardForm.RunList.Font.Color:=$ffffff

YesRadio:=TRadioButton.Create(WizardForm)
YesRadio.Left:=205
YesRadio.Top:=290
YesRadio.Width:=13
YesRadio.Height:=13
YesRadio.Color:=$b58434
YesRadio.OnClick:=@YesRadioOnClick
YesRadio.Parent:=WizardForm

YesRadioLabel:=TLabel.Create(WizardForm)
YesRadioLabel.Left:=221
YesRadioLabel.Top:=290
YesRadioLabel.Transparent:=True
YesRadioLabel.Caption:=WizardForm.YesRadio.Caption
YesRadioLabel.Parent:=WizardForm

NoRadio:=TRadioButton.Create(WizardForm)
NoRadio.Left:=205
NoRadio.Top:=310
NoRadio.Width:=13
NoRadio.Height:=13
NoRadio.Color:=$b58434
NoRadio.OnClick:=@NoRadioOnClick
NoRadio.Parent:=WizardForm

NoRadioLabel:=TLabel.Create(WizardForm)
NoRadioLabel.Left:=221
NoRadioLabel.Top:=310
NoRadioLabel.Transparent:=True
NoRadioLabel.Caption:=WizardForm.NoRadio.Caption
NoRadioLabel.Parent:=WizardForm
end;

Procedure ShowPageComponents(CurPageID: Integer);
begin
Case CurPageID of

wpWelcome:
begin
WelcomeLabel1.Show
WelcomeLabel2.Show
end

wpLicense:
begin
LicenseLabel1.Show
WizardForm.LicenseMemo.Show
WizardForm.LicenseAcceptedRadio.Show
LicenseAcceptedLabel.Show
WizardForm.LicenseNotAcceptedRadio.Show
LicenseNotAcceptedLabel.Show
end

wpPassword:
begin
PasswordLabel.Show
PasswordEditLabel.Show
WizardForm.PasswordEdit.Show
end

wpInfoBefore:
begin
InfoBeforeClickLabel.Show
WizardForm.InfoBeforeMemo.Show
end

wpUserInfo:
begin
UserInfoNameLabel.Show
WizardForm.UserInfoNameEdit.Show
UserInfoOrgLabel.Show
WizardForm.UserInfoOrgEdit.Show
UserInfoSerialLabel.Show
WizardForm.UserInfoSerialEdit.Show
end

wpSelectDir:
begin
SelectDirLabel.Show
SelectDirBrowseLabel.Show
WizardForm.DirEdit.Show
WizardForm.DirBrowseButton.Show
DiskSpaceLabel.Show

end

wpSelectComponents:
begin
SelectComponentsLabel.Show
WizardForm.TypesCombo.Show
WizardForm.ComponentsList.Show
ComponentsDiskSpaceLabel.Show
end

wpSelectProgramGroup:
begin
SelectStartMenuFolderLabel.Show
SelectStartMenuFolderBrowseLabel.Show
WizardForm.GroupEdit.Show
WizardForm.GroupBrowseButton.Show

end

wpSelectTasks:
begin
SelectTasksLabel.Show
WizardForm.TasksList.Show
end

wpReady:
begin
ReadyLabel.Show
ReadyLabel.Caption:=WizardForm.ReadyLabel.Caption
WizardForm.ReadyMemo.Show
end

wpInstalling:
begin
StatusLabel.Show
WizardForm.ProgressGauge.Show
end

wpInfoAfter:
begin
InfoAfterClickLabel.Show
WizardForm.InfoAfterMemo.Show
end

wpFinished:
begin
FinishedHeadingLabel.Show
FinishedLabel.Show
FinishedLabel.Caption:=WizardForm.FinishedLabel.Caption
WizardForm.RunList.hide
//YesRadio.Checked:=True
//YesRadio.Show
//YesRadioLabel.Show
//NoRadio.Show
//NoRadioLabel.Show
end
end;
end;

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=False;
Confirm:=False;
if MsgBox('Вы уверены что хотите отменить установку игры?', mbError, MB_YESNO) = idYes
then
Cancel:=true;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
HideAll
ShowPageComponents(CurPageID)
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

Procedure InitializeWizard();
var
Name1: string;
begin
ExtractTemporaryFile('Morrowind.bmp')
ExtractTemporaryFile('button.bmp')
ExtractTemporaryFile('Hand.cur')
ExtractTemporaryFile('Arrow.cur')

InitializeSkin

NewCursor:= LoadCursorFromFile(ExpandConstant('{tmp}\Hand.cur'));
NewCursor1:= LoadCursorFromFile(ExpandConstant('{tmp}\Arrow.cur'));
OldCursor:= SetClassLong(WizardForm.NextButton.Handle, GCL_HCURSOR, NewCursor);
OldCursor:= SetClassLong(WizardForm.Handle, GCL_HCURSOR, NewCursor1);
OldCursor:= SetClassLong(WizardForm.MainPanel.Handle, GCL_HCURSOR, NewCursor);

WizardForm.BackButton.Left:=293
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Left:=375
WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.Left:=600
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Top:=379
WizardForm.DirBrowseButton.Left:=580
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Top:=379
WizardForm.GroupBrowseButton.Left:=580
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
[/more]

Заранее, огромное Вам спасибо! Я очень сильно ценю вашу помощь! Я уже три недели сижу над этим кодом и не могу ничего поделать, я плохо разбираюсь в программировании, но сделать до конца начатое дело очень хочется, уже ничем другим заняться за компом не могу ;) Еще раз огромное спасибо, я на Вас очень рассчитываю! ;)
Автор: htuos
Дата сообщения: 16.08.2008 02:02
ComradG

Цитата:
Про них и говорил. А батник я уже заливал на narod.ru

то, что ты заливал на narod.ru это хорошо, а вот если бы еще ссылочкой поделился было бы еще лучше

Цитата:
Смотри http://nsis.sourceforge.net/Screenshots

что-то я там не увидел ничего особенного. стандартные компоненты.

ЗЫ если чего нету, думаю на винапи нарисовать можно, правда это муторное занятие. хотя возможно и не все из-за отсутствия типа pointer

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.