How to add them to a single page?
1 Answers
For the "Start menu folder" part, the easiest solution is to simply move all the controls from the
SelectProgramGroupPage
to theSelectDirPage
. And of course, shift them all down, below the existing controls.You should also shift the original
DiskSpaceLabel
up, next to other related controls.The last step is to update a tab order.
To hide the real "Select Start Menu Folder" page, use the
ShouldSkipPage
event function. Had you used theDisableProgramGroupPage=yes
, the selected folder won't show on the "Ready to Install" page.For the "desktop icon", you cannot move the
TasksList
control, as that is populated only, when the "Select Additional Tasks" page is entered. You have to create your new checkbox. And use theCheck
parameter to bind the custom checkbox to theIcons
section entry.To add an information about the "desktop icon" task on the "Ready to Install" page, you have to implement the
UpdateReadyMemo
event function
[Setup]
DisableProgramGroupPage=no
AllowNoIcons=yes
[Icons]
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; \
Check: ShouldCreateDesktopIcon
[Code]
var
DesktopCheck: TNewCheckBox;
function ShouldCreateDesktopIcon: Boolean;
begin
Result := DesktopCheck.Checked;
end;
procedure InitializeWizard();
var
Offset: Integer;
begin
{ shift the original `DiskSpaceLabel` up, next to the other related controls }
WizardForm.DiskSpaceLabel.Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(16);
{ Move all the controls from the `SelectProgramGroupPage` to the `SelectDirPage`. }
{ And shift them all down, below the existing controls. }
{ Update tab order. }
Offset := WizardForm.DiskSpaceLabel.Top + WizardForm.DiskSpaceLabel.Height + ScaleY(16) - WizardForm.SelectGroupBitmapImage.Top;
WizardForm.SelectGroupBitmapImage.Parent := WizardForm.SelectDirPage;
WizardForm.SelectGroupBitmapImage.Top := WizardForm.SelectGroupBitmapImage.Top + Offset;
WizardForm.SelectStartMenuFolderLabel.Parent := WizardForm.SelectDirPage;
WizardForm.SelectStartMenuFolderLabel.Top := WizardForm.SelectStartMenuFolderLabel.Top + Offset;
WizardForm.SelectStartMenuFolderBrowseLabel.Parent := WizardForm.SelectDirPage;
WizardForm.SelectStartMenuFolderBrowseLabel.Top := WizardForm.SelectStartMenuFolderBrowseLabel.Top + Offset;
WizardForm.GroupEdit.Parent := WizardForm.SelectDirPage;
WizardForm.GroupEdit.Top := WizardForm.GroupEdit.Top + Offset;
WizardForm.GroupEdit.TabOrder := WizardForm.GroupEdit.TabOrder + 100;
WizardForm.GroupBrowseButton.Parent := WizardForm.SelectDirPage;
WizardForm.GroupBrowseButton.Top := WizardForm.GroupBrowseButton.Top + Offset;
WizardForm.GroupBrowseButton.TabOrder := WizardForm.GroupBrowseButton.TabOrder + 100;
WizardForm.NoIconsCheck.Parent := WizardForm.SelectDirPage;
WizardForm.NoIconsCheck.Top := WizardForm.GroupEdit.Top + WizardForm.GroupEdit.Height + ScaleY(16);
WizardForm.NoIconsCheck.TabOrder := WizardForm.NoIconsCheck.TabOrder + 100;
{ create new "Create a desktop icon" checkbox }
DesktopCheck := TNewCheckBox.Create(WizardForm);
DesktopCheck.Parent := WizardForm.SelectDirPage;
DesktopCheck.Top := WizardForm.NoIconsCheck.Top + WizardForm.NoIconsCheck.Height + ScaleY(6);
DesktopCheck.Width := WizardForm.NoIconsCheck.Width;
DesktopCheck.Height := WizardForm.NoIconsCheck.Height;
DesktopCheck.Caption := ExpandConstant('{cm:CreateDesktopIcon}');
DesktopCheck.TabOrder := 200;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
{ To hide the real "Select Start Menu Folder" page }
Result := (PageID = wpSelectProgramGroup);
end;
function UpdateReadyMemo(
Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: string;
begin
if Length(MemoUserInfoInfo) > 0 then
Result := Result + MemoUserInfoInfo + NewLine + NewLine;
if Length(MemoDirInfo) > 0 then
Result := Result + MemoDirInfo + NewLine + NewLine;
if Length(MemoTypeInfo) > 0 then
Result := Result + MemoTypeInfo + NewLine + NewLine;
if Length(MemoComponentsInfo) > 0 then
Result := Result + MemoComponentsInfo + NewLine + NewLine;
if Length(MemoGroupInfo) > 0 then
Result := Result + MemoGroupInfo + NewLine + NewLine;
if DesktopCheck.Checked then
begin
S := DesktopCheck.Caption;
StringChange(S, '&', '');
Result :=
Result + SetupMessage(msgReadyMemoTasks) + NewLine +
Space + S + NewLine + NewLine;
end;
end;
Of course, I had to make the wizard form higher, to fit all the controls.

- 188,800
- 56
- 490
- 992