Здравствуйте еще раз, инно-гуру
Есть у меня проект инсталлятора. В нем будут несколько страниц, на каждой из которых будут свои списки установочных файлов. Страницы у меня уже прорисованы, списки составлены, осталось только связать нарисованные мной списки с фактически необходимыми файлами и вот тут моих знаний пока не хватает, к сожалению.
Я так понимаю, что разделы [Components], [Types] и [Files] здесь использовать не получится?
Вот прикладываю ниже код, который пока получился:
[more]
#expr Exec("cmd ", "/c echo #define DateTime '%DATE% %TIME:~0,8%' > data.iss")
#define BuildNum Int(ReadIni(SourcePath + "\\BuildInfo.ini","Info","Build","0"))
#expr BuildNum = BuildNum + 1
#expr WriteIni( SourcePath + "\\BuildInfo.ini","Info","Build", BuildNum )
#include "data.iss"
#define Bevel "сборник скомпилирован " + DateTime
[Setup]
AppName=AlexDJ Addon Pack
AppVerName=AlexDJ Addon Pack v2.6
AppPublisher=AlexDJ
AppPublisherURL=http://wow.panterkin.ru/
AppSupportURL=http://wow.panterkin.ru/
AppUpdatesURL=http://wow.panterkin.ru/
DefaultDirName=D:\Games\WoW\
DefaultGroupName=AlexDJ's Addon Pack
DisableProgramGroupPage=yes
AllowNoIcons=yes
;LicenseFile=license.txt
;InfoBeforeFile=infobefore.txt
;InfoAfterFile=infoafter.txt
OutputDir=!_Ready
CreateAppDir=false
[Types]
Name: custom; Description: Выборочная установка
;Name: "full"; Description: "Полная установка"
Name: minimal; Description: Минимальная установка; Flags: iscustom
Name: rus; Description: Установка только русификатора
Name: druid; Description: Набор аддонов, оптимизированный для игры друидом
Name: hunter; Description: Набор аддонов, оптимизированный для игры охотником
Name: mage; Description: Набор аддонов, оптимизированный для игры магом
Name: paladin; Description: Набор аддонов, оптимизированный для игры паладином
Name: priest; Description: Набор аддонов, оптимизированный для игры священником
Name: rogue; Description: Набор аддонов, оптимизированный для игры разбойником
Name: shaman; Description: Набор аддонов, оптимизированный для игры шаманом
Name: warlock; Description: Набор аддонов, оптимизированный для игры варлоком
Name: warrior; Description: Набор аддонов, оптимизированный для игры воином
[Files]
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: compiler:WizModernSmallImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: wow.jpg; DestDir: {tmp}; Flags: dontcopy
;Source: wow.bmp; DestDir: {tmp}; Flags: dontcopy
;Source: readme.doc; DestDir: {app}; Flags: isreadme
[Messages]
BeveledLabel=AlexDJ's Addon Pack (c) Night Strangers Guild - {#Bevel}
WizardSelectProgramGroup=
SelectStartMenuFolderDesc=Где программа установки должна создать ярлыки?
[_Code]
Var
Page: TWizardPage;
Text1,Text2,Text3,Text101: TNewStaticText;
Panel: TPanel;
ListBox: TListBox;
Check101,Check102,Check103,Check104: TCheckBox;
NoChecks,Label101,Label102,Label103,Label104: TLabel;
Image101: TBitmapImage;
Function Checked101: Boolean;
begin
Result:=Check101.Checked
end;
Function Checked102: Boolean;
begin
Result:=Check102.Checked
end;
Function Checked103: Boolean;
begin
Result:=Check103.Checked
end;
Function Checked104: Boolean;
begin
Result:=Check104.Checked
end;
Procedure Check101OnClick (Sender: TObject);
begin
Check101.Checked:=Not(Check101.Checked)
end;
Procedure Check102OnClick (Sender: TObject);
begin
Check102.Checked:=Not(Check102.Checked)
end;
Procedure Check103OnClick (Sender: TObject);
begin
Check103.Checked:=Not(Check103.Checked)
end;
Procedure Check104OnClick (Sender: TObject);
begin
Check104.Checked:=Not(Check104.Checked)
end;
procedure Check101MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text101.Enabled:=True
Text101.Caption:='Описание первого компонента'
Image101.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image101.Visible:=True
end;
procedure Check102MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text101.Enabled:=True
Text101.Caption:='Описание второго компонента'
Image101.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'))
Image101.Visible:=True
end;
procedure Check103MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text101.Enabled:=True
Text101.Caption:='Описание третьего компонента'
Image101.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image101.Visible:=True
end;
procedure Check104MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text101.Enabled:=True
Text101.Caption:='Описание четвертого компонента'
Image101.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'))
Image101.Visible:=True
end;
procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text101.Enabled:=False
Text101.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
Image101.Visible:=False
end;
var
MouseLabel,SiteLabel: TLabel;
procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://wow.panterkin.ru/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed
end;
procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;
procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen
end;
procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;
const // Fade-эффект
AW_FADE_IN = $00080000;
AW_FADE_OUT = $00090000;
AW_SLIDE_IN_LEFT = $00040001;
AW_SLIDE_OUT_LEFT = $00050002;
AW_SLIDE_IN_RIGHT = $00040002;
AW_SLIDE_OUT_RIGHT = $00050001;
AW_SLIDE_IN_TOP = $00040004;
AW_SLIDE_OUT_TOP = $00050008;
AW_SLIDE_IN_BOTTOM = $00040008;
AW_SLIDE_OUT_BOTTOM = $00050004;
AW_DIAG_SLIDE_IN_TOPLEFT = $00040005;
AW_DIAG_SLIDE_OUT_TOPLEFT = $0005000a;
AW_DIAG_SLIDE_IN_TOPRIGHT = $00040006;
AW_DIAG_SLIDE_OUT_TOPRIGHT = $00050009;
AW_DIAG_SLIDE_IN_BOTTOMLEFT = $00040009;
AW_DIAG_SLIDE_OUT_BOTTOMLEFT = $00050006;
AW_DIAG_SLIDE_IN_BOTTOMRIGHT = $0004000a;
AW_DIAG_SLIDE_OUT_BOTTOMRIGHT = $00050005;
AW_EXPLODE = $00040010;
AW_IMPLODE = $00050010;
function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean;
external 'AnimateWindow@user32 stdcall';
// Фоновая картинка
const
BACKGROUND=6;
function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';
function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';
Procedure InitializeWizard();
var
Lbl: TLabel;
Memo: TMemo;
Bmp: TBitmapImage;
begin
begin // Фоновая картинка
ExtractTemporaryFile('wow.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\wow.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;
begin // Отключаем кнопку "свернуть"
WizardForm.BorderIcons:=[biSystemMenu]
end;
begin // Fade-эффект
AnimateWindow(WizardForm.Handle,500,AW_DIAG_SLIDE_IN_BOTTOMRIGHT);
end;
// Ссылка на домашнюю страницу
begin
MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm
SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Left:=40
SiteLabel.Top:=400
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=clBlue
SiteLabel.Caption:='Домашняя страница'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm
end;
ExtractTemporaryFile('WizModernSmallImage.bmp')
ExtractTemporaryFile('WizModernSmallImage-IS.bmp')
// Скрываем элементы в Визард-форме
//WizardForm.Bevel.Hide
//WizardForm.Bevel1.Hide
WizardForm.MainPanel.Hide
WizardForm.BeveledLabel.Hide
//WizardForm.OuterNotebook.Hide
//WizardForm.InnerNotebook.Hide
WizardForm.BackButton.Hide
WizardForm.DiskSpaceLabel.Hide;
//WizardForm.LicenseMemo.Hide
//WizardForm.LicenseAcceptedRadio.Hide
//WizardForm.LicenseNotAcceptedRadio.Hide
//WizardForm.PasswordEdit.Hide
//WizardForm.InfoBeforeMemo.Hide
//WizardForm.UserInfoNameEdit.Hide
//WizardForm.UserInfoOrgEdit.Hide
//WizardForm.UserInfoSerialEdit.Hide
//WizardForm.DirEdit.Hide
//WizardForm.DirBrowseButton.Hide
//WizardForm.TypesCombo.Hide
//WizardForm.ComponentsList.Hide
//WizardForm.GroupEdit.Hide
//WizardForm.GroupBrowseButton.Hide
//WizardForm.NoIconsCheck.Hide
//WizardForm.TasksList.Hide
//WizardForm.ReadyMemo.Hide
//WizardForm.ProgressGauge.Hide
//WizardForm.InfoAfterMemo.Hide
WizardForm.RunList.Hide
// Верхняя (main) панель
WizardForm.MainPanel.Left :=0
WizardForm.MainPanel.Top :=20
WizardForm.MainPanel.Width :=550
WizardForm.MainPanel.Height :=40
// Заголовок страницы
WizardForm.PageNameLabel.Left:=52
WizardForm.PageNameLabel.Top:=20
WizardForm.PageNameLabel.Width:=525
WizardForm.PageNameLabel.Height:=20
WizardForm.PageNameLabel.Autosize:=True
WizardForm.PageNameLabel.WordWrap:=False
//WizardForm.PageNameLabel.Color:=$663300
WizardForm.PageNameLabel.Font.Color:=$000000
WizardForm.PageNameLabel.Parent:=WizardForm
// Строка BevelLabel
WizardForm.BeveledLabel.Left:=40
WizardForm.BeveledLabel.Top:=435
// Строка Bevel (полоска под заголовком)
WizardForm.Bevel.Left :=40
WizardForm.Bevel.Top :=390
WizardForm.Bevel.Width :=555
WizardForm.Bevel.Height :=2
// Строка Bevel1 (полоска над кнопками)
WizardForm.Bevel1.Left :=0
WizardForm.Bevel1.Top :=40
WizardForm.Bevel1.Width :=555
WizardForm.Bevel1.Height:=2
// Визард-форма
WizardForm.Top := 100
WizardForm.Left := 100
WizardForm.Width := 650
WizardForm.Height := 500
// Кнопка "Back"
WizardForm.BackButton.Left := 265
WizardForm.BackButton.Top := 400
WizardForm.BackButton.Width := 90
WizardForm.BackButton.Height := 20
// Кнопка "Next"
WizardForm.NextButton.Left := 367
WizardForm.NextButton.Top := 400
WizardForm.NextButton.Width := 90
WizardForm.NextButton.Height := 20
// Кнопка "Cancel"
WizardForm.CancelButton.Left := 500
WizardForm.CancelButton.Top := 400
WizardForm.CancelButton.Width := 90
WizardForm.CancelButton.Height := 20
// Внешний фрейм
WizardForm.OuterNotebook.Left := 40
WizardForm.OuterNotebook.Top := 0
WizardForm.OuterNotebook.Width := 550
WizardForm.OuterNotebook.Height := 375
// Внутренний фрейм
WizardForm.InnerNotebook.Left := 0
WizardForm.InnerNotebook.Top := 70
WizardForm.InnerNotebook.Width := 550
WizardForm.InnerNotebook.Height := 375
// Заголовок страницы
Page:=CreateCustomPage(1, 'Основные аддоны', 'Выберите компоненты, которые вы хотите установить.')
#include "skin/main.iss"
Page:=CreateCustomPage(2, 'Классовые аддоны', 'Выберите компоненты, которые вы хотите установить.')
//#include "skin/classes.iss"
Page:=CreateCustomPage(3, 'Карты', 'Выберите компоненты, которые вы хотите установить.')
//#include "skin/maps.iss"
end;
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
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;
[/more]
и инклуд с нарисованной страницей:
[more]
[Components]
Name: rus; Description: Русификатор; Types: rus
Name: rus/RuWOW; Description: RuWOW; Types: rus
Name: rus/Talents; Description: Русификация талантов; Types: rus
Name: rus/NPC; Description: Русификация речи NPC; Types: rus
Name: main; Description: Основные аддоны; Types:
Name: main/dependance; Description: Обязательные аддоны; Types: minimal custom; Flags: fixed dontinheritcheck checkablealone; Languages:
Name: main/save; Description: Автосейв; Types: custom
[Files]
;Source: Addons\Rus\RuWOW\*; DestDir: {app}; Components: rus/RuWOW; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Addons\Rus\Talents\*; DestDir: {app}/Interface/Addons; Components: rus/Talents; Flags: ignoreversion recursesubdirs createallsubdirs
;Source: Addons\Rus\NPC\*; DestDir: {app}; Components: rus/NPC; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Addons\Main\AutoSave\*; DestDir: {app}/Interface/Addons; Components: main/save; Flags: ignoreversion recursesubdirs createallsubdirs
[_CODE]
// Блок скриншотов
Memo :=TMemo.Create(WizardForm)
Memo.SetBounds (16,161,198,143)
Memo.Color :=clBtnFace
Memo.Enabled :=False
Memo.BorderStyle :=bsNone
Memo.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,160,200,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Image101 :=TBitmapImage.Create(WizardForm)
Image101.Left :=10
Image101.Top :=10;
Image101.Width :=55
Image101.Height :=55
Image101.Parent :=Memo
// Блок описания компонентов
Memo :=TMemo.Create(WizardForm)
Memo.SetBounds (231,1,288,303)
Memo.Color :=clBtnFace
Memo.Enabled :=False
Memo.BorderStyle :=bsNone
Memo.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (230,0,290,305)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Text101 :=TNewStaticText.Create(Page)
Text101.Left :=15
Text101.Top :=15
Text101.Width :=260
Text101.Height :=275
Text101.AutoSize :=False
Text101.WordWrap :=True
Text101.Parent :=Memo
NoChecks :=TLabel.Create(Page)
NoChecks.Width :=WizardForm.Width
NoChecks.Height :=WizardForm.Height
NoChecks.Autosize :=False
NoChecks.Transparent :=True
NoChecks.OnMouseMove :=@NoChecksMouseMove
NoChecks.Parent :=Page.Surface
// Список компонентов
ListBox := TListBox.Create(Page)
ListBox.Left := 15
ListBox.Top := 0
ListBox.Width := 200
ListBox.Height := 145
//ListBox.BorderStyle := bsNone
ListBox.Parent := Page.Surface
Check101:=TCheckBox.Create(Page)
Check101.Left:=2
Check101.Top:=0
Check101.Width:=196
Check101.Checked:=True
Check101.Parent:=ListBox
Check102:=TCheckBox.Create(Page)
Check102.Left:=2
Check102.Top:=16
Check102.Width:=196
Check102.Checked:=True
Check102.Parent:=ListBox
Check103:=TCheckBox.Create(Page)
Check103.Left:=2
Check103.Top:=32
Check103.Width:=196
Check103.Checked:=True
Check103.Parent:=ListBox
Check104:=TCheckBox.Create(Page)
Check104.Left:=2
Check104.Top:=48
Check104.Width:=196
Check104.Checked:=True
Check104.Parent:=ListBox
Label101:=TLabel.Create(Page)
Label101.Autosize:=True
Label101.WordWrap:=False
Label101.Left:=16
Label101.Top:=2
Label101.Caption:='RuWOW'
Label101.OnClick:=@Check101OnClick
Label101.OnMouseMove:=@Check101MouseMove
Label101.Parent:=Check101
Label102:=TLabel.Create(Page)
Label102.Autosize:=True
Label102.WordWrap:=False
Label102.Left:=16
Label102.Top:=2
Label102.Caption:='Русификация талантов'
Label102.OnClick:=@Check102OnClick
Label102.OnMouseMove:=@Check102MouseMove
Label102.Parent:=Check102
Label103:=TLabel.Create(Page)
Label103.Autosize:=True
Label103.WordWrap:=False
Label103.Left:=16
Label103.Top:=2
Label103.Caption:='Русификация речи NPC'
Label103.OnClick:=@Check103OnClick
Label103.OnMouseMove:=@Check103MouseMove
Label103.Parent:=Check103
Label104:=TLabel.Create(Page)
Label104.Autosize:=True
Label104.WordWrap:=False
Label104.Left:=16
Label104.Top:=2
Label104.Caption:='Автосейв'
Label104.OnClick:=@Check104OnClick
Label104.OnMouseMove:=@Check104MouseMove
Label104.Parent:=Check104
[/more]