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

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

Автор: KurtWagner
Дата сообщения: 16.08.2008 03:09
Да нет! Я хотел след.
--------------------------------
#define TimeLimit '2007:12:31'
Если стоит ограничение 2007 - он выводит ощибку и не запускаеться
------------------------
А если 2008 он запускаеться только етим годом! т.е. след. год будет не доступен...

при коде

function InitializeSetup: Boolean;
begin
Result:= True

Он Выводит ощибку и продолжает установку! А мне ет не надо!
Автор: Genri
Дата сообщения: 16.08.2008 05:10
KurtWagner

Цитата:
Он Выводит ощибку и продолжает установку!
-- верно. Как ты прописал, так и выплняет. Ты прописал выполнять всегда, а сообщение выводить только когда лимит вышел. А если прописать примерно так:
function InitializeSetup: Boolean;
begin
if not TimeLimit then MsgBox('Внимание! Вы исчерпали лимит времени.', mbError, MB_OK)
else Result:= True;
end;

...что в переводе на человеческий означает: "если лимит вышел - вывести сообщение; в противном случае - запустить инсталлятор", то я так понимаю, ты получишь требуемое.

Добавлено:
CyberEsper -- за основу можешь взять следующий [more=пример]
Код: [no]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Code]
var
Page: TInputOptionWizardPage;

procedure InitializeWizard();
var
ResultCode: Integer;
begin
Page := CreateInputOptionPage(wpInstalling,
'License Information', 'Are you a registered user?',
'If you are a registered user, please check the box below, then click Next.',
True, False);

{0} Page.Add('Я проходил(а) Morrowind и готов(а) начать проходить Bloodmoon');
{1} Page.Add('Я проходил(а) Morrowind и готов(а) начать проходить Tribunal');
{2} Page.Add('Я проходил(а) Morrowind и Tribunal');
{3} Page.Add('Я проходил(а) Morrowind и Bloodmoon');
{4} Page.Add('Я не проходил(а) Morrowind');
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = Page.ID then
begin
if Page.Values[0] then
begin
// действия для чекбокса №0
end else
if Page.Values[1] then
begin
// действия для чекбокса №1
end else
if Page.Values[2] then
begin
// действия для чекбокса №2
end else
if Page.Values[3] then
begin
// действия для чекбокса №3
end else
if Page.Values[4] then
begin
// действия для чекбокса №4
end;
end;
end;[/no]
Автор: CyberEsper
Дата сообщения: 16.08.2008 05:52
Забыл подметить, ник человека который мне поможет, будет упомянут в моей сборке, я понимаю как все это сложно, я не за что не присвою чужую работу себе...

Добавлено:
Огромное спасибо Genri, но я уже использовал похожий пример , дело в том, что объекты все скрыты, как их показать непонятно, что бы такого небыло, нужно не использовать оформление и скины кнопок а это уже совсем другое. Но всеравно, спасибо тебе огромное за внимание, я это очень ценю...

Добавлено:
Собака зарыта гдето тут:

Возьмем под пример окно "финиша":
Где "NoRadio" не перезагружать компьютер, а "YesRadio" перезагрузить...
[more=Настройка расположения объектов]// 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[/more]
[more=Показать объекты]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[/more]
Автор: Victor_Dobrov
Дата сообщения: 16.08.2008 08:02
Восстановлены ссылки в шапке, которые EEEl ранее затёр вирусами. Alex66699, спасибо за помощь.
Автор: SergeyLS
Дата сообщения: 16.08.2008 12:21
Привет!

Цитата:
SergeyLS
Или я слишком многого хочу от инсталлятора?


Цитата:
Genri
в принципе много, но инно может еще больше

Большое спасибо Genri.
Все здорово получилось!
Пока.
С уважением, Сергей.
Автор: CyberEsper
Дата сообщения: 16.08.2008 17:08
Никак не получается ничего сделать, что то я вообще не понимаю, сделал кнопку а компилятор мне пишет:
"Unknown indentifier 'RADIOBUTTONM'"
Все, у меня нет больше сил... Осталось надеяться только на вас, что вы поможете мне написать код который я вложил в пост "01:42 16-08-2008"...
Автор: ComradG
Дата сообщения: 16.08.2008 17:17

Цитата:
а вот если бы еще ссылочкой поделился было бы еще лучше

В батнике нашел ошибку. Ща занят ее исправлением.
Кстати,htuos

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

смотри внимательней. А еще лучше скачай и посмотри, что творится при наведении курсора на компонент. Такое винапи ваще рехнешся писать. Поэтому на паскале долбаю аддон.


Добавлено:
CyberEsper
Посмотри здесь, может поможет.
http://narod.ru/disk/2049361000/iss.rar.html
Автор: Sampron
Дата сообщения: 16.08.2008 17:45
ComradG

Цитата:
Такое винапи ваще рехнешся писать. Поэтому на паскале долбаю аддон.

Для этого уже есть готовая библиотека:
http://restools.hanzify.org/article.asp?id=78
http://restools.hanzify.org/article.asp?id=89
Автор: ComradG
Дата сообщения: 16.08.2008 17:52
И чего она дает?
Автор: Sampron
Дата сообщения: 16.08.2008 18:19
ComradG

Цитата:
А еще лучше скачай и посмотри, что творится при наведении курсора на компонент.


Автор: CyberEsper
Дата сообщения: 16.08.2008 18:41

Цитата:
CyberEsper
Посмотри здесь, может поможет

Sampron, именно этот исходник я использую, в нем та мне и нужно разобраться. Построение алгоритма не стандартное, нигде в справке или сборнике скриптов найти описание такого способа написания не могу. Сначало переменные объявляют, потом их скрывают с помощью ".hide" после чего в конце после настроек расположение объектов все это показывают с помощью ".show" Я пытался сделать свою кнопку переменной "RadioButtonM: TRadioButton;" так же скрыл, потом развернул, после чего компилятор очень сильно ругался, не понимаю что делал не так настройки кнопок вписывал как в исходнике... Если использовать старый метод или программу "Inno Setup Form Designer" для того что бы сделать свою страничку и кнопки в Setup`е, все объекты на этой странице будут невидимы... Уже три недели сижу над этим скриптом и ничего не могу поделать... Я вот думаю, если всетаки получится создать кнопки по этому примеру, как их потом программировать? Ухххх...

PS: Пост с описанием проблемы с исходным кодом находится в посте "01:42 16-08-2008"
Автор: Diawer
Дата сообщения: 16.08.2008 19:00
Есть такая идея, сделать при помощи Inno Setup такую вещ как Autorun, прикинув по возможностям Inno это реально.
Суть такая убрать всё, оставив только (что бы смысл был понятен):

[Tasks]
Name: directx; Description: Установить DirectX; GroupDescription: Программны необходимые для корректной работы игры:
Name: physx; Description: Установить AGEIA PhysX; GroupDescription: Программны необходимые для корректной работы игры:
Name: adberdr; Description: Установить Adobe Reader; GroupDescription: Программны необходимые для корректной работы игры:; Flags: unchecked

[Run]
FileName: {drive:{src}}\DirectX\directx.exe; WorkingDir: {drive:{src}}\DirectX; Tasks: directx; Flags: skipifsilent
FileName: {drive:{src}}\PhysX\PhysX.exe; WorkingDir: {drive:{src}}\PhysX; Tasks: physx; Flags: skipifsilent
FileName: {drive:{src}}\AdbeRdr\AdbeRdr.exe; WorkingDir: {drive:{src}}\AdbeRdr; Tasks: adberdr; Flags: skipifsilent
Filename: {app}\Starter.exe; WorkingDir: {app}; Description: Запустить игру; Flags: nowait postinstall skipifsilent

конечно заменив на "Радио буттон", то есть нажав в Таске на кнопку, переход сразу к запуску соответствующей строчке
в секции Ран и ничего лишнего.
Я пробовал это сделать, но со своими знаниями Паскаля понял, что просто замучаю всех на форуме вопросами,
пока достигну результата.
Может кого заинтересует, идея вроде здравая и нужная.
Автор: ComradG
Дата сообщения: 16.08.2008 19:01

Цитата:
Для этого уже есть готовая библиотека

А, я на ссылку сразу не обратил внимания! это китайская фигня. Такое можно сделать и без всяких библиотек. А вот чтоб точь-в-точь как НСИСька было - написать слабо всем. Даже я чет подзатупел.

Добавлено:
Diawer
В инно вообще-то реально сделать полноценный авторан, который бы запускался из .inf-файла.

Добавлено:

Цитата:
Уже три недели сижу над этим скриптом и ничего не могу поделать...

Ты скрипт-то покажи!
Автор: SotM
Дата сообщения: 16.08.2008 20:14
Sampron

Цитата:
Для этого уже есть готовая библиотека:
http://restools.hanzify.org/article.asp?id=78
http://restools.hanzify.org/article.asp?id=89

Я скачал это дело. И на первый взгляд вроде бы интересная фича, но есть ли какой-нить хелп на английском? А то вот с китайским у мну совсем уж плохо.
Конечно же методом тыка можно как нить разобраться, но хотелось бы хелпик.
Автор: ComradG
Дата сообщения: 16.08.2008 20:25
Sampronвидимо считает, что все мы говорим по-китайски

Цитата:
И на первый взгляд вроде бы интересная фича

Все более, чем тривиально и на руборде уже рассматривалось. А то, что какой-то китаец переписал dll-ку, причем не самым лучшим образом, еще не значит что это круто.
Автор: Sampron
Дата сообщения: 16.08.2008 21:08
ComradG

Цитата:
Sampronвидимо считает, что все мы говорим по-китайски

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

Цитата:
Все более, чем тривиально и на руборде уже рассматривалось. А то, что какой-то китаец переписал dll-ку, причем не самым лучшим образом, еще не значит что это круто.

Круто или не круто но тем не менее этот "какой-то китаец" решил эту проблему, размер библиотеки небольшой, и как по мне лучше использовать эту dll-ку чем писать километровый код который раньше на руборде обсуждался.


Автор: ComradG
Дата сообщения: 16.08.2008 21:13

Цитата:
решил эту проблему

Отнюдь. Он не решил эту проблему, а просто ее усугубил. С ComboBox выбор компонентов написать слабо? То-то.
Автор: Sampron
Дата сообщения: 16.08.2008 21:32
ComradG
А какое отношение ComboBox имеет к данной длл?
Автор: ComradG
Дата сообщения: 16.08.2008 21:38
Здается мне ты и НСИСьку в глаза-то не видел.
Посмотри повнимательней http://nsis.sourceforge.net/Screenshots
Обрати внимание на скрин с выбором компонентов.
Теперь дошло?
Автор: Sampron
Дата сообщения: 16.08.2008 21:46
ComradG
Здается мне ты и справку на не китайском из шапки в глаза-то не видел.
Обрати внимание на секцию [Types].
Если в примере нет ComboBox это не означает что в инно он вовсе отсутствует.
Теперь дошло?
Автор: ComradG
Дата сообщения: 16.08.2008 21:55

Цитата:
Если в примере нет ComboBox это не означает что в инно он вовсе отсутствует.

Он стандартизирован и имитирует НСИС тока в дескрипшине, а комбо по определению там невозможно выставить. А до тебя дошло?
Не если ты такой крутой перец ткни меня носом или привиди пример скрипта, который бы разруливал эту китайскую dll так, чтобы был дополнен скрипт http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=586&limit=1&m=1#1
А то, что предлагаешь ты - нужно создавать новую страницу мастера, имхо.
Автор: Sampron
Дата сообщения: 16.08.2008 22:02
ComradG

Цитата:
привиди пример скрипта

ComboBox есть в стандартной странице, смотри пример Components.iss в папке с примерами в корне инно.
Автор: ComradG
Дата сообщения: 16.08.2008 22:05
Я тебе про то, чтобы не рисоватьновый комбо и не вязать его с листбоксом. Смотри http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=586&limit=1&m=1#1
Неужели так трудно понять?
Автор: CyberEsper
Дата сообщения: 17.08.2008 00:31

Цитата:
ComradG:
Ты скрипт-то покажи!

Так ведь в самом моем первом посте я выкладывал скрипт, в принципе, он почти ничем не отличается от оригинального примера "iss". Вот, выкладываю еще раз, что бы не нужно было искать первый пост и копаться в "Inno Setup Scripting v5.1"
[more=Скрипт];*******************************************************************************
; Главное меню ("Выбор ini")
;*******************************************************************************
;Сообщение : Вы проходили 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

[Messages]
BeveledLabel=- Emerald Team end ru-board.com -

[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]

На предыдущей страничке этого форума, я ведь даже писал где я предполагаю "зарыта собака", там было выложено несколько фрагментов кода, с подходом программиста чайника.
Автор: JbBaD
Дата сообщения: 17.08.2008 09:19
Помогите кто знает.
Создал custompage, там CheckBox.
Если он отмечен, то должен устанавливается дополнительный файл.
Как реализовать?
Автор: Victor_Dobrov
Дата сообщения: 17.08.2008 13:50
[more=Отображение всплывающей подсказки]
[Setup]
AppName=Components Descriptions
AppVerName=Components Descriptions
CreateAppDir=false

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

[Types]
Name: tweak; Description: Оптимальный выбор
Name: full; Description: Выбрать все компоненты
Name: deselect; Description: Сбросить все компоненты
Name: custom; Description: Пользовательский режим; Flags: iscustom

[Components]
Name: Safe; Description: Параметры безопасности; Types: deselect
Name: Safe\wscsvc; Description: Отключить 'Центр обеспечения безопасности'; Types: full tweak
Name: Safe\Signing; Description: Разрешить установку неподписанных драйверов; Types: full
Name: WB; Description: 'Мой компьютер' - Настройки; Types: deselect
Name: WB\Computer; Description: Добавить ярлыки - Корзина, Сетевые подключения; Types: full tweak
Name: WB\Low; Description: Уведомление о недостатке свободного места на диске
Name: WB\Low\1; Description: Изменить порог срабатывания с 10 % до 1%; Flags: exclusive; Types: tweak
Name: WB\Low\No; Description: Не предупреждать о переполнении дисков; Flags: exclusive; Types: full
Name: IE; Description: Настройки обозревателя Internet Explorer; Types: deselect
Name: IE\Cache; Description: Временные файлы Internet - использовать сжатие; Types: full tweak
Name: User; Description: Параметры входа в систему
Name: User\Logon; Description: Пользователи - использовать страницу приветствия; Flags: exclusive; Types: full
Name: User\Logon2K; Description: Классический вид - выводить запрос имени и пароля; Flags: exclusive; Types: tweak
Name: User\Autologon; Description: Задействовать автоматический вход в систему; Types: full tweak
Name: User\Sound; Description: Не сопровождать звуком загрузку и завершение работы; Types: full
Name: User\English; Description: Английский язык ввода по умолчанию для всех; Types: full
Name: Sys; Description: Настройки системы и оборудования; Types: deselect
Name: Sys\Memory; Description: Память - оптимизировать работу ядра Windows
Name: Sys\Memory\1024; Description: 1024Мб физической памяти на этом компьютере; Flags: exclusive
Name: Sys\Timeout; Description: Разрешить быстрое завершение работы; Types: full tweak

[Files]
Source: compiler:descctrl.dll; Flags: dontcopy
; скачать библиотеку descctrl.dll (6 кб) можно здесь: http://victor-dobrov.narod.ru/inno_descctrl.7z

[Code]
var Point: TPoint; CompDesc: TEdit; MessageForm: TForm; MessagePanel: TPanel; MessageLabel: TLabel; n, frame: integer;

function EnableDesc(ComponentsListHandle, DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';
procedure GetCursorPos(var Point: TPoint); external 'GetCursorPos@user32 stdcall delayload';
function SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, wFlags: Longint):Boolean; external 'SetWindowPos@user32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32 stdcall delayload';
function DrawIconEx(hdc, x, y, hIcon, cx, cy, AniCur, Draw, Flags: Longint): Longint; external 'DrawIconEx@user32 stdcall delayload';
function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32 stdcall delayload';

Procedure DrawIcon(Form: TWinControl; File: String; nIcon, Left, Top, Size, BColor: Integer); var Panel: TPanel; Rect: TRect; Begin
Panel:= TPanel.Create(Form); Panel.SetBounds(Left, Top, Size, Size); Panel.Parent:= Form
with TBitmapImage.Create(Panel) do begin Parent:= Panel; with Bitmap do begin
     Width:= Size; Height:= Size; Rect.Right:= Size; Rect.Bottom:= Size; Canvas.Brush.Color:= BColor; Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0,0, ExtractIcon(GetModuleHandle(0), ExpandConstant(File), nIcon), Size, Size,0,0,3); end; end;
End;

Procedure ResizeLabel(Obj: TLabel; Text: String; MaxWidth: Integer); var k, w, h: integer;    Begin    { размер формы подгоняется под текст}
    Obj.AutoSize:= true; Obj.WordWrap:= false; Obj.Caption:= Text; { авторазмер}
    w:= Obj.Width; h:= Obj.Height; n:= (w + frame*2)/MaxWidth + 1
Repeat
    Obj.Width:= w/n + frame*2*n + k
    Obj.Height:= h * n
    Obj.WordWrap:= true; k:= k + 4
Until (Obj.Height/h = n) or (Obj.Width > MaxWidth)
End;

Procedure ShowHint(String: string; AIndex: Integer; Center: Bool); Begin    { размер формы подгоняется под текст, если AIndex = 0, значок не рисуется}
    frame:= 10; if AIndex <> 0 then String:= ' '+ String;
GetCursorPos(Point); MessageLabel.Left:= frame; MessageLabel.Top:= frame
    ResizeLabel(MessageLabel, String, WizardForm.ClientWidth)
    if Center then n:= WizardForm.Left + WizardForm.Width/2 - (MessageLabel.Width + frame*2 -2)/2 else n:= Point.X + 12
MessageForm.SetBounds(n, Point.Y + 12, MessageLabel.Width + frame*2 -2, MessageLabel.Height + frame*2 -2)
    if AIndex <> 0 then DrawIcon(MessageForm, '{sys}\shell32.dll', AIndex, 9, 8, 16, MessagePanel.Color);
    MessageForm.Show; SetWindowPos(MessageForm.Handle, -1, 0, 0, 0, 0, 3);
End;

Procedure DeinitializeSetup();
Begin
    disabledesc();
End;

Procedure CurStepChanged(CurStep: TSetupStep);
Begin
    if CurStep = ssInstall then disabledesc();
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectComponents then enableDesc(WizardForm.ComponentsList.Handle,CompDesc.Handle,
    'Демонстрационный режим. Действия по изменению настроек системы или параметров безопасности не выполняются. Компоненты и их описания даны только для примера. Описания отделяются друг от друга точкой с запятой и должны содержать не более 255 символов.;' +
    'Отключить «Центр обеспечения безопасности» (рекомендуется отключить эту практически бесполезную службу);' +
    'Разрешить установку неподписанных драйверов (упрощает настройку компьютера сразу после установки системы);' +
    '«Мой компьютер» - Секция настроек, влияющих на работу компьютера;' +
    'ярлыки Корзина и Сетевые подключения будут созданы в папке «Мой компьютер»;' +
    'Изменить порог срабатывание уведомления о недостатке свободного места на диске;' +
    'Изменить порог срабатывания с 10 % (значение по-умолчанию) до 1% (необходимо для дисков большой ёмкости);' +
    'Выдача всплывающей подсказки о переполнении дисков будет отключена;' +
    'Общие настройки обозревателя Internet Explorer;' +
    'Папка временных файлов Internet Explorer будет сжата средствами файловой системы NTFS;' +
    'Параметры входа в систему;' +
    'Пользователи - использовать страницу приветствия (новый экран загрузки, появившийся в Windows XP);' +
    'Классический вид - выводить запрос имени и пароля (экран загрузки, использующийся в Windows 2000);' +
    'Задействовать автоматический вход в систему для текущего пользователя без запроса имени и пароля;' +
    'Не сопровождать звуком загрузку и завершение работы (немного ускоряет загрузку «Рабочего стола»);' +
    'Английский язык ввода по умолчанию для всех (для новых пользователей);' +
    'Настройка системы на имеющийся объём оперативной памяти и процессорного кэша, оптимизация файловой подсистемы;' +
    'После установке данной опции уменьшать объём оперативной памяти НЕЖЕЛАТЕЛЬНО;' +
    'Вычисленный объём установленной физической памяти на этом компьютере;' +
    'Разрешить быстрое завершение работы (сетевые соединения могут быть разорваны преждевременно)'
    );
End;

Procedure ObjectOnClick(Sender: TObject);
Begin
Case TObject(Sender) of    { событие объекта}
    CompDesc:
        if CompDesc.Text > '' then ShowHint(CompDesc.Text, -1001, true) else MessageForm.Hide;
    MessageForm:
        WizardForm.BringToFront;
end;
End;

Procedure InitializeWizard;
Begin
CompDesc:= TEdit.Create(WizardForm)
    CompDesc.Parent:= WizardForm
    CompDesc.Visible:= false
    CompDesc.OnChange:= @ObjectOnClick
MessageForm:= CreateCustomForm;
    MessageForm.BorderStyle:= bsNone
    MessageForm.OnActivate:= @ObjectOnClick
MessagePanel:= TPanel.Create(MessageForm)
    MessagePanel.BevelInner:= bvLowered;
    MessagePanel.Align:= alClient;
    MessagePanel.Color:= $E1FFFF;
    MessagePanel.Parent:= MessageForm
MessageLabel:= TLabel.Create(MessagePanel)
    MessageLabel.Transparent:= true
    MessageLabel.Font.Name:= 'Arial'
    MessageLabel.Font.Size:= WizardForm.Font.Size + 1
    MessageLabel.Parent:= MessagePanel
End;
[/more] при наведении курсора мыши на строку в списке компонентов.

Здесь предлагалось много скриптов, показывающих описания для списка компонентов подобно инсталлятору NSIS.
Но эти примеры создают дополнительную панель, из-за которой уменьшается список компонентов, что не всегда удобно.
Используя библиотеку descctrl.dll, я сделал свой вариант, в котором при наведении курсора на компонент показывается всплывающая подсказка с описанием этого компонента. Подсказки можно выводить по центру списка компонентов или под курсором, с иконкой или без неё. Библиотеку descctrl.dll можно скачать здесь.

JbBaD - вот [more=пример]
[Setup]
AppName=Game AddOn
AppVerName=Game AddOn 1.0
DefaultDirName={pf}\My Program

[Files]
Source: compiler:Examples\Readme.txt; DestDir: {app}; Check: IsCheckBox(0)

[Code]
var Page: TInputOptionWizardPage;

function IsCheckBox(n: Integer): Boolean;
begin
    Result:= Page.Values[n];
end;

procedure InitializeWizard();
begin
Page:= CreateInputOptionPage(wpWelcome, 'Game addons', 'Please select files.', 'AddOns ..', false, false);
    Page.Add('AddOn1');
end;
[/more] с одним CheckBox-ом, остальные добавляются также, как первый.
Автор: JbBaD
Дата сообщения: 17.08.2008 14:29
Victor_Dobrov
Благодарю
Автор: SotM
Дата сообщения: 17.08.2008 14:56
2All:
Тут раньше упоминалось несколько раз как выводить подсказку при наведении мыши. То же самое можно увидеть и в китайской библиотеке. Но ведь элементы в списке можно запросто выбирать с помощью клавиатуры (стрелок). А как сделать, чтобы те же самые подсказки появлялись при работе с клавиатурой? Или такое невозможно сделать в рамках Inno?
Автор: ComradG
Дата сообщения: 17.08.2008 18:08
CyberEsper
Вообще-то это называется просто списать скрипт не подумав вовсе. Смотри предыдущие топы форума.
Victor_Dobrov
А полной имитацией NSIS ты не занимался? Я в том плане, что если преписать хидеры НСИСа на паскаль Иннки, то через препроцессор можно-таки сделать оное сходу. А вот силами самой Иннки, без дополнительных dll и препроцессора задача, по-видимому, решается довольно сложно. А рисовать собственную страницу ломает. Ведь согласись, что порой на странице выбора компонентов куда удобней крутануть комбо, где уже есть пометки полная это инсталляция или по выбору.
Твой скрипт весьма информативен и педантизм, с которым ты подошел к решению задачки похвален. Но лично я пытаюсь решать задачи непосредственно, без сторонних элементов.
Чувак, ты - гений! Уважуха тебе и почет!
Автор: CyberEsper
Дата сообщения: 17.08.2008 20:55

Цитата:
ComradG:
Вообще-то это называется просто списать скрипт не подумав вовсе. Смотри предыдущие топы форума.

Я знал, что это называется списать, (я даже выше писал, что красть чужие труды я не собираюсь, ник или инициалы написаны в сборке будут) программирую я очень плохо, а “сетап” сделать очень хочется, хороший. Поэтому я и обратился за помощью на этот форум, как я понял тут сидят только продвинутые программисты "Турбо паскаля" и делятся друг с другом опытом, хорошо, буду писать сам...
PS: Форум я листал, я уже выше оставлял про это пост, что нашел много чего интересного, но что нужно мне, ничего нет. Вы тут на “Inno Setup” автораны делаете, а страницу со “скином” и кнопками помочь сделать не можете. Я не хочу никого обидеть, и вообще кто я такой, чтобы так на что-то надеяться, я ОЧЕНЬ сильно ценю ваше внимание, спасибо вам хоть за какие-то ответы.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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