Вопрос Как изменить порядок страниц?

zettend

Старожил
Как изменить порядок страниц, что-бы страница wpSelectProgramGroup была после wpSelectDir а не после wpSelectComponents?

И как сделать распаковку файлов из архива типа setup.bin перед запуском?
 
Последнее редактирование:

vint56

Ветеран
Проверенный
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
  wpSelectComponents:
  begin
  WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectProgramGroupPage;
  end;
  wpSelectProgramGroup:
  begin
  WizardForm.SelectProgramGroupPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
  end;
end;
end;
 

ZVSRus

Участник
vint56,
А как notebook SelectTasksPage перенести на, ну скажем на вновь созданную страницу идущею за страницей приветствия.
Что-бы все корректно отображалось при первом запуске Inno, а то у меня TasksList начинает отображаться после того как дойдеш до страницы
SelectTasksPage и вернешься назад на вновь созданную страницу.
 

vint56

Ветеран
Проверенный
ZVSRus,
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[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

[Icons]
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Check: DesktopIcoms;


[Code]
var
  TasksPage: TWizardPage;
  DopIcons: TLabel;
  DopCheckIcons: TNewCheckBox;

function DesktopIcoms: Boolean;
begin
  Result:= DopCheckIcons.Checked;
end;

procedure InitializeWizard();
begin
  TasksPage := CreateCustomPage(wpWelcome, 'Выберите дополнительные задачи', 'Какие дополнительные задачи необходимо выполнить?');

  with WizardForm.SelectTasksLabel do
  begin
    Parent:=TasksPage.Surface;
  end;

  DopIcons := TLabel.Create(WizardForm);
  with DopIcons do
  begin
    Parent := TasksPage.Surface;
    Caption := 'Дополнительные значки';
    Left := ScaleX(40);
    Top := ScaleY(32);
    Width := ScaleX(150);
    Height := ScaleY(13);
  end;
  DopCheckIcons := TNewCheckBox.Create(WizardForm);
  with DopCheckIcons do
  begin
    Parent := TasksPage.Surface;
    Left := ScaleX(40);
    Top := ScaleY(50);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Создать значек на Рабочем столе: ';
    Checked := True;
    State := cbChecked;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
  wpSelectComponents:
  begin
  WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectProgramGroupPage;
  end;
  wpSelectProgramGroup:
  begin
  WizardForm.SelectProgramGroupPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
  end;
end;
end;
 

ZVSRus

Участник
vint56
Не совсем то, я имел ввиду TasksList. В вашем примере вы меняете местами Notebook со страницы Выбора компонентов на страницу программной группы и наоборот. Как со страницы SelectTasksPage переместить Notebook на нужную страницу.
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

Name: Soft; Description: Установить дополнительное программное обеспечение; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

Name: Soft/vcredist_x64; Description: Моё-1; Flags: unchecked; Check: IsWin64
Name: Soft/vcredist_x64; Description: Моё-2; Flags: unchecked; Check: IsWin64
Name: Soft/vcredist_x64; Description: Моё-3; Flags: unchecked; Check: IsWin64

Name: Soft/vcredist_x64; Description: Моё-4; Flags: unchecked; Check: IsWin64
Name: Soft/vcredist_x64; Description: Моё-5; Flags: unchecked; Check: IsWin64
Name: Soft/vcredist_x64; Description: Моё-6; Flags: unchecked; Check: IsWin64

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[code]
var
  TasksPage: TWizardPage;

procedure InitializeWizard();
begin
  TasksPage := CreateCustomPage(wpWelcome, 'Выбор дополнительных задач', '...');
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
   TasksPage.ID:
   begin
    WizardForm.SelectProgramGroupPage.Notebook.ActivePage:= WizardForm.SelectTasksPage;
   end;

   wpSelectComponents:
   begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectProgramGroupPage;
   end;

   wpSelectProgramGroup:
   begin
    WizardForm.SelectProgramGroupPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
   end;
end;
end;
 
Последнее редактирование:

vint56

Ветеран
Проверенный
ZVSRus, я все правильно тебя понял просто TasksList не отображается пока ты до него не до станицы SelectTasksPage я не знаю как сделать стандартными средствами потому пример дал как добавить через код

Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"


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


[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

[Icons]
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Check: IsChecked(1)
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"; Check: IsChecked(2)

[Code]
var
  TasksPage: TWizardPage;
  CheckListBox: TNewCheckListBox;
  BorderWidth: Integer;


function IsChecked(const Index: Integer): Boolean;
begin
    Result:= CheckListBox.Checked[Index]
end;

procedure InitializeWizard();
begin
  TasksPage := CreateCustomPage(wpWelcome, 'Выберите дополнительные задачи', 'Какие дополнительные задачи необходимо выполнить?');

  with WizardForm.SelectTasksLabel do
  begin
    Parent:=TasksPage.Surface;
  end;

  CheckListBox := TNewCheckListBox.Create(WizardForm);
  CheckListBox.Parent := TasksPage.Surface;
  CheckListBox.SetBounds(ScaleX(0), ScaleY(30), ScaleX(417), ScaleY(180));
  BorderWidth := (CheckListBox.Width-CheckListBox.ClientWidth) div 2;
  CheckListBox.Flat := False;
  CheckListBox.Color := clMenu;
  CheckListBox.BorderStyle := bsNone;

  CheckListBox.AddCheckBoxEx('Дополнитьельные значки', '', 0, False, True, True, True, nil,True);  //IsChecked(0)

  CheckListBox.AddCheckBoxEx('Создать ярлык на рабочем столе', '', 1, True, True, True, True, nil,True);//IsChecked(1)
  CheckListBox.AddCheckBoxEx('Создать ярлык в Панели быстрого запуска ', '', 1,True, True, True, True, nil,True);//IsChecked(2)

  CheckListBox.AddCheckBoxEx('Установить дополнительное программное обеспечение', '', 0, True, True, True, True, nil,True);//IsChecked(3)
  CheckListBox.AddCheckBoxEx('Microsoft DirectX', '', 1,True, True, True, True, nil,True);//IsChecked(4)
  CheckListBox.AddCheckBoxEx('Microsoft Visual С++ 2005 Redistributable', '', 1, True, True, True, True, nil,True);//IsChecked(5)
  CheckListBox.AddCheckBoxEx('Microsoft Visual С++ 2005 Redistributable x64', '', 1,True, True, True, True, nil,True);//IsChecked(6)

  CheckListBox.AddCheckBoxEx('Моё-1', '', 1, True, True, True, True, nil,True);//IsChecked(7)
  CheckListBox.AddCheckBoxEx('Моё-2', '', 1,True, True, True, True, nil,True); //IsChecked(8)
  CheckListBox.AddCheckBoxEx('Моё-3', '', 1, True, True, True, True, nil,True);//IsChecked(9)
  CheckListBox.AddCheckBoxEx('Моё-4', '', 1,True, True, True, True, nil,True); //IsChecked(10)
  CheckListBox.AddCheckBoxEx('Моё-5', '', 1, True, True, True, True, nil,True);//IsChecked(11)
  CheckListBox.AddCheckBoxEx('Моё-6', '', 1,True, True, True, True, nil,True); //IsChecked(12)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
  wpSelectComponents:
  begin
  WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectProgramGroupPage;
  end;
  wpSelectProgramGroup:
  begin
  WizardForm.SelectProgramGroupPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
  end;
end;
end;
 
Последнее редактирование:

ZVSRus

Участник
vint56
Я так и понял что по вашему первому примеру, что выше сделать задумку не получиться. Потому что секция [Tasks] привязана к странице SelectTasksPage. А хотелось сделать костомную страницу с Notebook со страницы SelectTasksPage и привязать секцию [Tasks]. Что бы можно было добавлять компоненты.

 

Avengerz13

Участник
ZVSRus, Можно попробовать вот так
Код:
;[MyCustomTaskList]
#Define Label1 "My Custom TaskList"
#Define NewCheckBox1 "NewCheckBox1"
#Define NewCheckBox2 "NewCheckBox2"
#Define NewCheckBox3 "NewCheckBox3"
#Define NewCheckBox4 "NewCheckBox4"

[Setup]
AppName=My Program
AppVersion=1.5
CreateAppDir=no
DisableProgramGroupPage=yes
DefaultGroupName=My Program
DisableWelcomePage=No

[_Code]
var
  Bevel2: TBevel;
  Label1: TLabel;
  NewCheckBox1: TNewCheckBox;
  NewCheckBox2: TNewCheckBox;
  NewCheckBox3: TNewCheckBox;
  NewCheckBox4: TNewCheckBox;

  CheckListBox: TNewCheckListBox;

procedure CreateCustomPages;
var
  Page: TWizardPage;
begin
  Page := CreateCustomPage(wpWelcome, 'Custom Page 1', 'Custom Text 1');

  Bevel2 := TBevel.Create(WizardForm);
  with Bevel2 do
  begin
    Left := ScaleX(0);
    Top := ScaleY(32);
    Width := ScaleX(417);
    Height := ScaleY(186);
    Shape := bsFrame;
    Parent := Page.Surface;
  end;

  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Caption := '{#Label1}';
    Left := ScaleX(16);
    Top := ScaleY(40);
    Width := ScaleX(94);
    Height := ScaleY(13);
    Parent := Page.Surface;
  end;

#ifdef NewCheckBox1
  NewCheckBox1 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox1 do
  begin
    Left := ScaleX(24);
    Top := ScaleY(64);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := '{#NewCheckBox1}';
    Parent := Page.Surface;
  end;
#endif

#ifdef NewCheckBox2
  NewCheckBox2 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox2 do
  begin
    Left := ScaleX(24);
    Top := ScaleY(88);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := '{#NewCheckBox2}';
    Parent := Page.Surface;
  end;
#endif

#ifdef NewCheckBox3
  NewCheckBox3 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox3 do
  begin
    Left := ScaleX(24);
    Top := ScaleY(112);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := '{#NewCheckBox3}';
    Parent := Page.Surface;
  end;
#endif

#ifdef NewCheckBox4
  NewCheckBox4 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox4 do
  begin
    Left := ScaleX(24);
    Top := ScaleY(136);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := '{#NewCheckBox4}';
    Parent := Page.Surface;
  end;
#endif

  Page := CreateCustomPage(Page.ID, 'Custom Page 2', 'Custom Text 2');

  CheckListBox:=TNewCheckListBox.Create(WizardForm);
  with CheckListBox do begin     
    Parent:=Page.Surface;         
    Left:=ScaleX(0);
    Top:=ScaleY(10);
    Width:=ScaleX(413);
    Height:=ScaleY(210);             
    AddCheckBox(ExpandConstant('Install Sofware'),'',0,False,True,False,True,Nil);
    AddRadioButton(ExpandConstant('1'),'',1,True,True,Nil);             
    AddRadioButton(ExpandConstant('2'),'',1,False,True,Nil);                   
    AddCheckBox(ExpandConstant('Install DLC'),'',0,False,True,False,True,Nil);
    AddRadioButton(ExpandConstant('1'),'',1,True,True,Nil);             
    AddRadioButton(ExpandConstant('2'),'',1,False,True,Nil);
    AddCheckBox(ExpandConstant('Install Inno Setup'),'',0,False,True,False,True,Nil);
    AddRadioButton(ExpandConstant('1'),'',1,True,True,Nil);             
    AddRadioButton(ExpandConstant('2'),'',1,False,True,Nil);
    AddCheckBox(ExpandConstant('Install Unicorn'),'',0,False,True,False,True,Nil);
    AddRadioButton(ExpandConstant('1'),'',1,True,True,Nil);             
    AddRadioButton(ExpandConstant('2'),'',1,False,True,Nil);
   end;

  Page := CreateCustomPage(Page.ID, 'Custom Page 3', 'Custom Text 3');

  Page := CreateCustomPage(Page.ID, 'Custom Page 4', 'Custom Text 4');

  Page := CreateCustomPage(Page.ID, 'Custom Page 5', 'Custom Text 5');

  Page := CreateCustomPage(Page.ID, 'Custom Page 6', 'Custom Text 6');

end;

procedure InitializeWizard();
begin
  CreateCustomPages;
  WizardForm.BeveledLabel.Caption := ' Hello World ';
end;
 
Последнее редактирование:

ZVSRus

Участник
Avengerz13
Я конечно извиняюсь, но ваш пример не в тему. Как создать новую страницу, разместить на ней чекбоксы, радиопереключатели, как к ним прописать функции и процедуры и т.д и т.п для меня не ново. Ваш ответ не для темы Как изменить порядок страниц?
 

Avengerz13

Участник
ZVSRus, Ну вы можете поменять порядок страницы но никак не измените встроенные функций Inno Setup. Возможно сделать видимость смены страниц, но лишаетесь частично или полностью всех встроенных функций.
Код:
Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectDir:
    begin
      WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
      WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents)
      WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption;
      WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc)
    end;
  wpSelectComponents:
    begin
      WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
      WizardForm.DiskSpaceLabel.Caption:= WzardForm.ComponentsDiskSpaceLabel.Caption;
      WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir)
      WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint
    end;
  end;
End;
Лучший вариант это пожалуй
создать новую страницу, разместить на ней чекбоксы, радиопереключатели, как к ним прописать функции и процедуры
 
Сверху