Здравствуйте. Мне нужна помощь в создании инсталлятора. На этом же форуме мне подсказали скрипт для вывода описания и превью компонентов через библиотеку botva2
Можно ли прикрепить подобный скрипт для чекбоксов и радиокнопок, созданных на новой странице (через CreateCustomPage)? На этой странице должен быть CheckListBox, а в нем все чекбоксы и по наведению мыши инсталлятор должен выводить описание и показывать превью.
P.S. Хотелось бы еще увидеть, как устанавливать файлы, если чекбокс отмечен.
Код:
#include "Modules\botva2.iss"
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Files]
Source: Files\*; Flags: dontcopy
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
russian.ComponentsName1=Моя программа™
russian.ComponentsName2=Помощь
russian.ComponentsName2_1=Документация
russian.ComponentsName2_2=Руководство пользователя
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
russian.ComponentsDescription1=Устанавливается обязательно
russian.ComponentsDescription2=Помощь
russian.ComponentsDescription3=Прочитать документацию
russian.ComponentsDescription4=Прочитать руководство пользователя
[Types]
Name: full; Description: Full installation; Flags: iscustom
[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
[Code]
type
TComponentDesc = record Description: String; Index: Integer; end;
var
Descs: array of TComponentDesc;
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;
ImgPanel: TPanel;
Indx: Integer;
Img: array of Longint;
procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
Indx:=-1;
for i:= 0 to GetArrayLength(Descs)-1 do begin
if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
if (Indx >=0)and(Area=iaItem) then Info.Caption:= Descs[Indx].Description else Info.Caption:= ExpandConstant('{cm:ComponentsInfoPanel2}');
//
ImgSetVisibility(Img[0],False);
ImgSetVisibility(Img[1],False);
ImgSetVisibility(Img[2],False);
ImgPanel.Caption := 'Превью';
case Index of
1: begin ImgPanel.Caption := ''; ImgSetVisibility(Img[0],True); end;
2: begin ImgPanel.Caption := ''; ImgSetVisibility(Img[1],True); end;
3: begin ImgPanel.Caption := ''; ImgSetVisibility(Img[2],True); end;
end;
ImgApplyChanges(ImgPanel.Handle);
end;
procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;
function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;
procedure ImgCreate(Filename: string; i: integer);
begin
Img[i]:= ImgLoad(ImgPanel.Handle, Filename, 0, 0, ScaleX(200), ScaleY(181) - WizardForm.TypesCombo.Top, True,True);
ImgSetVisibility(Img[i],False);
end;
procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:=False;
WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Width := ScaleX(207);
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription
ImgPanel := TPanel.Create(WizardForm);
ImgPanel.Parent := WizardForm.SelectComponentsPage;
ImgPanel.Caption := 'Превью';
ImgPanel.Top := WizardForm.TypesCombo.Top;
ImgPanel.Left := ScaleX(217);
ImgPanel.Width := ScaleX(200);
ImgPanel.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
ImgPanel.BevelInner := bvRaised;
ImgPanel.BevelOuter := bvLowered;
//
SetArrayLength(Img, WizardForm.ComponentsList.ItemCount);
//
ImgCreate('1.jpg', 0);
ImgCreate('2.jpg', 1);
ImgCreate('3.jpg', 2);
//
ImgApplyChanges(ImgPanel.Handle);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(190);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(417);
InfoPanel.Height := ScaleY(40);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(403);
Info.Top := ScaleY(12);
Info.Height := ScaleY(24);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;
AddDescription(1, 'Справка'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
AddDescription(2, 'Английская справка'); //Второй параметр - это собственно описание компонента
AddDescription(3, 'Русская справка');
AddDescription(4, 'Плагины');
AddDescription(5, 'Внутреннего просмотра');
AddDescription(6, 'Архиваторные');
AddDescription(7, 'Системные');
AddDescription(8, 'CanonCam');
AddDescription(9, 'PluginManager');
AddDescription(10, 'Registry');
AddDescription(11, 'Services');
AddDescription(12, 'StartupGuard');
AddDescription(13, 'Другие');
end;
procedure DeinitializeSetup;
begin
gdipShutDown;
end;
Можно ли прикрепить подобный скрипт для чекбоксов и радиокнопок, созданных на новой странице (через CreateCustomPage)? На этой странице должен быть CheckListBox, а в нем все чекбоксы и по наведению мыши инсталлятор должен выводить описание и показывать превью.
P.S. Хотелось бы еще увидеть, как устанавливать файлы, если чекбокс отмечен.