Genri, просто огромное-преогромное спасибище
Предложенный Вами код, по сравнение с моим - просто шедевр
Есть, куда расти
Однако, я столкнулся с проблемой. Как Вы поняли инсталлятор у меня состоит из нескольких страниц. Так вот, пока я делал одну страницу, все работало на ура, но как только перешел к следующей - начались проблемы. Обработчик событий мыши все время срабатывал на 2-ой странице, даже если событие и происходила на первой. Я пробовал добавлять переменную j: integer; и на второй странице использовать ее, но это не помогло. А если на второй странице делать счетчик чекбоксов не с 0, а с первого после 1-ой странице (i + 1), то инсталлятор вообще не запускается. В чем у меня косяк?
Вот очищенный код:
[more]
[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
OutputDir=!_Ready
CreateAppDir=true
[Files]
Source: readme.rtf; DestDir: {tmp}; Flags: dontcopy
Source: screen.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy
;Source: Addons\Rus\RuWOW\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(1)
Source: Addons\Rus\Talents\*; DestDir: {app}/Interface/Addons; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(2)
;Source: Addons\Rus\NPC\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(3)
Source: Addons\Main\AutoSave\*; DestDir: {app}/Interface/Addons; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(6)
Source: Addons\Classes\Druid\DruidBar\*; DestDir: {app}/Interface/Addons/DruidBar; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(8)
;Source: Addons\Classes\Druid\DruidStats\*; DestDir: {app}/Interface/Addons/DruidStats; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(9)
;Source: Addons\Classes\Druid\DruidTips\*; DestDir: {app}/Interface/Addons/DruidTips; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(10)
[_Code]
var
Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;
BitmapImage: TBitmapImage;
InfoBmp: array of TBitmap;
function CheckedBox(ItemNumber: integer): Boolean;
begin // проверка,
Result:= ListBox.Checked[ItemNumber]; // отмечен ли соответствующий чекбокс
end;
// ВНИМАНИЕ! Данная реализация процедур CheckOnClick и CheckMouseMove
// применима только в случае, если ListBox отображается без скролбара,
// т.е. все чекбоксы видны без промотки.
procedure CheckOnClick (Sender: TObject); // событие на клик
begin
if MouseY < ListBox.Items.Count then
begin // выполняется, если кликнули на чекбокс с номером MouseY
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
// если надо при клике выполнить еще что-то,
// дописываем сюда
end;
end;
procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin // событие на движение мыши
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
begin // выполняется, если курсор пересекает чекбокс с номером MouseY
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
BitmapImage.Bitmap:= InfoBmp[MouseY];
// если надо при движении курсора выполнить еще что-то,
// дописываем сюда
end;
end;
Procedure InitializeWizard();
var
i: integer;
Bmp: TBitmapImage;
begin
ExtractTemporaryFile('readme.rtf');
// Создание страницы, которая будет отображена после wpWelcome
// Надо в другом месте, меняем wpWelcome на wpSelectDir или другую
//Page:=CreateCustomPage(wpWelcome, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')
Page:=CreateCustomPage(1, 'Основные аддоны', 'Выберите компоненты, которые вы хотите установить.')
ListBox:= TNewCheckListBox.Create(Page); // создание списка чекбоксов
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 149
Parent := Page.Surface
// Добавляем нужное кол-во чекбоксов
AddCheckBox('Русификатор', '', 0, True, True, True, True, TStringList.Create);
AddCheckBox('RuWOW', '', 1, True, True, False, True, TStringList.Create);
AddCheckBox('Русификатор талантов', '', 1, True, True, False, True, TStringList.Create);
AddCheckBox('Русификатор NPC', '', 1, True, True, False, True, TStringList.Create);
AddCheckBox('Основные аддоны', '', 0, True, True, True, True, TStringList.Create);
AddCheckBox('Библиотеки и т.п.', '', 1, True, True, False, True, TStringList.Create);
AddCheckBox('Автосейв от AlexDJ', '', 1, True, True, False, True, TStringList.Create);
// Загружаем файлы описания (каждому чекбоксу - свой файл)
TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
TStrings(ItemObject[3]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
TStrings(ItemObject[4]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
TStrings(ItemObject[5]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
TStrings(ItemObject[6]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
end;
Memo:= TRichEditViewer.Create(Page); // создаем Memo для отображения описаний
with Memo do
begin
Left := 231;
Top := 1;
Width := 308;
Height := 303;
Color := clBtnFace;
Enabled := False;
BorderStyle := bsNone;
Parent := Page.Surface;
ScrollBars := ssVertical;
end;
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (230,0,310,305)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
CheckLabel:= TLabel.Create(Page); // создаем TLabel (для событий мыши)
with CheckLabel do
begin
Width :=ListBox.Width;
Height :=ListBox.Height;
Autosize :=False;
Transparent :=True;
OnMouseMove :=@CheckMouseMove;
OnClick :=@CheckOnClick;
Parent :=ListBox;
Cursor := 1;
end;
BitmapImage := TBitmapImage.Create(Page); // создаем TBitmapImage для
with BitmapImage do // отображения картинок
begin // к описаниям
AutoSize := True;
Left := ListBox.Left;
Top := ListBox.Top + ListBox.Height + 8;
Width := ListBox.Width;
Height := 32;
Parent := Page.Surface;
end;
for i:=0 to ListBox.Items.Count - 1 do // по кол-ву чекбоксов
begin // создаем TBitmap-ы
SetArrayLength(InfoBmp, i+1);
InfoBmp[_i]:= TBitmap.Create;
end;
// для каждого чекбокса грузим свою картинку к описанию
InfoBmp[0].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[1].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[2].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[3].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[4].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[5].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[6].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
// Рамки для блока скриншотов //
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,302,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (215,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
// Рамки для блока скриншотов //
Page:=CreateCustomPage(2, 'Классовые аддоны', 'Выберите компоненты, которые вы хотите установить.')
ListBox:= TNewCheckListBox.Create(Page); // создание списка чекбоксов
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 300
Parent := Page.Surface
// Добавляем нужное кол-во чекбоксов
AddCheckBox('Druid (Друид)', '', 0, True, True, True, True, TStringList.Create);
AddCheckBox('Druid Stats I', '', 1, True, True, False, True, TStringList.Create);
//AddCheckBox('Druid Bar', '', 1, True, True, False, True, TStringList.Create);
//AddCheckBox('Druid Tips', '', 1, True, True, False, True, TStringList.Create);
// Загружаем файлы описания (каждому чекбоксу - свой файл)
TStrings(ItemObject[7]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[8]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
end;
Memo:= TRichEditViewer.Create(Page); // создаем Memo для отображения описаний
with Memo do
begin
Left := 231;
Top := 1;
Width := 308;
Height := 303;
Color := clBtnFace;
Enabled := False;
BorderStyle := bsNone;
Parent := Page.Surface;
ScrollBars := ssVertical;
end;
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (230,0,310,305)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
CheckLabel:= TLabel.Create(Page); // создаем TLabel (для событий мыши)
with CheckLabel do
begin
Width :=ListBox.Width;
Height :=ListBox.Height;
Autosize :=False;
Transparent :=True;
OnMouseMove :=@CheckMouseMove;
OnClick :=@CheckOnClick;
Parent :=ListBox;
Cursor := 1;
end;
BitmapImage := TBitmapImage.Create(Page); // создаем TBitmapImage для
with BitmapImage do // отображения картинок
begin // к описаниям
AutoSize := True;
Left := ListBox.Left;
Top := ListBox.Top + ListBox.Height + 8;
Width := ListBox.Width;
Height := 32;
Parent := Page.Surface;
end;
for i:=0 to ListBox.Items.Count - 1 do // по кол-ву чекбоксов
begin // создаем TBitmap-ы
SetArrayLength(InfoBmp, i+1);
InfoBmp[_i]:= TBitmap.Create;
end;
// для каждого чекбокса грузим свою картинку к описанию
InfoBmp[7].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[8].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
// Рамки для блока скриншотов //
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,302,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (215,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface
// Рамки для блока скриншотов //
end;
[/more]
И еще, наверное, последнее, что хочется сделать в своем инсталляторе, так это добавить увеличенный скриншот. То есть при нажатии на маленький скриншот, экран должен "потемнеть" и в центре открыться большой, скажем, 800*600, при нажатии на который, экран снова "светлеет" и все возвращается в исходную. Увеличенный скриншот - это не увеличенная картинка маленького - это просто 2-я картинка, так что не нужно растягивать картинку, нужно просто, чтобы появлялась вторая.
Где-то когда-то у кого-то я такое видел, поэтому хотелось бы сделать у себя такое
Как это можно реализовать?