Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Упрощение мастера установки InnoSetup: объединение страниц в одну

Delphi , Программа и Интерфейс , Инсталяция

При создании установщика с помощью InnoSetup может возникнуть необходимость объединить несколько страниц мастера установки в одну, чтобы упростить процесс установки для пользователей. В этой статье мы рассмотрим, как можно достичь этого, используя встроенные директивы InnoSetup или паскаль-скрипт.

Проблема Пользователь хочет Modify InnoSetup installer, чтобы отобразить на одной странице мастера установки выбор директории программы, группу в меню Пуск и задачу создания ярлыка на рабочем столе, упростив и сделав более элегантным мастера установки. Можно ли это сделать с помощью встроенных директив или требуется использование пользовательского паскаль-скрипта? Есть ли подсказки или ссылки на известный пример, который поможет достичь этого?

Решение Для достижения этой цели можно использовать tanto встроенные директивы, как и пользовательский паскаль-скрипт. В этом примере мы покажем, как создать пользовательскую страницу мастера установки, которая будет содержать все необходимые контролы и передавать значения в обычные страницы InnoSetup, чтобы выполнить функциональность.

Пример кода на Object Pascal (Delphi) для создания пользовательской страницы мастера установки:

[Code]
Var
  CustomSelectDirPage: TWizardPage;

...

function IsCreateDesktopIconChecked(): Boolean;
var
  DesktopShortcutCheckBox: TNewCheckBox;
  Page: TWizardPage;
begin
  Page := PageFromID(CustomSelectDirPage.ID);
  DesktopShortcutCheckBox := TNewCheckBox(Page.Surface.Controls[12])
  Result := DesktopShortcutCheckBox.Checked;
end;

function CustomSelectDirPageNextButtonClick(Sender: TWizardPage): Boolean;
var
  DirExistsWarning: String;
  FDirEdit: TEdit;
begin
  Result := True;
  FDirEdit := TEdit(Sender.Surface.Controls[4]);
  DirExistsWarning := LowerCase('{#SetupSetting("DirExistsWarning")}'); //  "auto", "true" or "false"
  if (DirExistsWarning = 'true') and (DirExists(ExpandConstant(FDirEdit.Text)))  then
  begin
   if MsgBox('The Folder:' + #13#10#13#10 + ExpandConstant(FDirEdit.Text) + #13#10#13#10 +
             'already exists. Would you like to install to that folder anyway?', mbConfirmation, MB_YESNO) = IDNO then
    Result := false;
  end;
end;

procedure CreateCustomSelectDirPage();
var
  WizardStyle: String;

  // Pages
  ThisPage: TWizardPage;
  SelectDirPage: TWizardPage;
  SelectProgramGroupPage: TWizardPage;

  // Custom Controls
  DesktopShortcutCheckBox: TNewCheckBox;

  // wpSelectDir Controls
  FSelectDirBitmapImage: TBitmapImage;
  FDiskSpaceLabel: TNewStaticText;
  FDirBrowseButton: TButton;
  FDirEdit: TEdit;
  FSelectDirBrowseLabel: TNewStaticText;
  FSelectDirLabel: TNewStaticText;

  // wpSelectProgramGroup Controls
  FSelectGroupBitmapImage: TBitmapImage;
  FNoIconsCheck: TCheckBox;
  FGroupBrowseButton: TButton;
  FGroupEdit: TEdit;
  FSelectStartMenuFolderBrowseLabel: TNewStaticText;
  FSelectStartMenuFolderLabel: TNewStaticText;
begin
  WizardStyle := LowerCase('{#SetupSetting("WizardStyle")}'); //  "classic" or "modern"

  // Pages
  SelectDirPage          := PageFromID(wpSelectDir);
  SelectProgramGroupPage := PageFromID(wpSelectProgramGroup);
  ThisPage               := CreateCustomPage(wpInfoBefore, SelectDirPage.Caption + ' | ' + SelectProgramGroupPage.Caption,
                                                               SelectDirPage.Description + #13#10 + SelectProgramGroupPage.Description);
  CustomSelectDirPage := ThisPage

  // wpSelectDir Control References
  FSelectDirBitmapImage := TBitmapImage(SelectDirPage.Surface.Controls[0]);
  FDiskSpaceLabel       := TNewStaticText(SelectDirPage.Surface.Controls[1]);
  FDirBrowseButton      := TButton(SelectDirPage.Surface.Controls[2]);
  FDirEdit              := TEdit(SelectDirPage.Surface.Controls[3]);
  FSelectDirBrowseLabel := TNewStaticText(SelectDirPage.Surface.Controls[4]);
  FSelectDirLabel       := TNewStaticText(SelectDirPage.Surface.Controls[5]);

  // wpSelectDir Control Parenting
  FSelectDirBitmapImage.Parent := ThisPage.Surface;
  FDiskSpaceLabel.Parent       := ThisPage.Surface;
  FDirBrowseButton.Parent      := ThisPage.Surface;
  FDirEdit.Parent              := ThisPage.Surface;
  FSelectDirBrowseLabel.Parent := ThisPage.Surface;
  FSelectDirLabel.Parent       := ThisPage.Surface;

  // wpSelectDir Control Positioning
  if WizardStyle = 'classic' then
  begin
    FSelectDirBrowseLabel.Visible := False;
    FDirEdit.Top := FSelectDirLabel.Top + 30;
    FDirBrowseButton.Top := FDirEdit.Top;
  end;

  // wpSelectProgramGroup Control References
  FSelectGroupBitmapImage           := TBitmapImage(PageFromID(wpSelectProgramGroup).Surface.Controls[0])
  FNoIconsCheck                     := TCheckBox(PageFromID(wpSelectProgramGroup).Surface.Controls[1])
  FGroupBrowseButton                := TButton(PageFromID(wpSelectProgramGroup).Surface.Controls[2])
  FGroupEdit                        := TEdit(PageFromID(wpSelectProgramGroup).Surface.Controls[3])
  FSelectStartMenuFolderBrowseLabel := TNewStaticText(PageFromID(wpSelectProgramGroup).Surface.Controls[4])
  FSelectStartMenuFolderLabel       := TNewStaticText(PageFromID(wpSelectProgramGroup).Surface.Controls[5])

  // wpSelectProgramGroup Control Parenting
  FSelectGroupBitmapImage.Parent           := ThisPage.Surface;
  FSelectStartMenuFolderLabel.Parent       := ThisPage.Surface;
  FSelectStartMenuFolderBrowseLabel.Parent := ThisPage.Surface;
  FGroupEdit.Parent                        := ThisPage.Surface;
  FGroupBrowseButton.Parent                := ThisPage.Surface;
  FNoIconsCheck.Parent                     := ThisPage.Surface;

  // wpSelectProgramGroup Control Positioning
  if WizardStyle = 'modern' then
  begin
    FSelectGroupBitmapImage.Top           := FDirEdit.Top + 70;
    FSelectStartMenuFolderLabel.Top       := FSelectGroupBitmapImage.Top + 10;
    FSelectStartMenuFolderBrowseLabel.Top := FSelectStartMenuFolderLabel.Top + 35;
    FGroupEdit.Top                        := FSelectStartMenuFolderBrowseLabel.Top + 20;
    FGroupBrowseButton.Top                := FGroupEdit.Top;
    FNoIconsCheck.Top                     := FGroupEdit.Top - 42;
  end
  else
  begin
    FSelectStartMenuFolderBrowseLabel.Visible := False;
    FSelectGroupBitmapImage.Top           := FDirEdit.Top + 70;
    FSelectStartMenuFolderLabel.Top       := FSelectGroupBitmapImage.Top + 10;
    FGroupEdit.Top                        := FSelectStartMenuFolderLabel.Top + 30;
    FGroupBrowseButton.Top                := FGroupEdit.Top;
    FNoIconsCheck.Top                     := FGroupEdit.Top + 28;
  end;

  // Custom Controls
  DesktopShortcutCheckBox            := TNewCheckBox.Create(ThisPage);
  DesktopShortcutCheckBox.Parent     := ThisPage.Surface;
  DesktopShortcutCheckBox.Top        := FDirEdit.Top + 30;
  DesktopShortcutCheckBox.Caption    := CustomMessage('CreateDesktopIcon');
  DesktopShortcutCheckBox.Checked    := True;
  DesktopShortcutCheckBox.Width      := FNoIconsCheck.Width;

  ThisPage.OnNextButtonClick := @CustomSelectDirPageNextButtonClick;

end;

Чтобы применить это решение, вам нужно будет добавить в свой скрипт InnoSetup следующие директивы:

DisableDirPage=True
DisableProgramGroupPage=True

И вызвать процедуру CreateCustomSelectDirPage() в разделе [Code] вашего скрипта.

Заключение Используя встроенные директивы или пользовательский паскаль-скрипт, можно создать упрощенный мастер установки InnoSetup, объединив несколько страниц в одну. В этом примере показано, как создать пользовательскую страницу мастера установки, которая содержит все необходимые контролы и передает значения в обычные страницы InnoSetup, чтобы выполнить функциональность.

Создано по материалам из источника по ссылке.

Пользователь хочет Modify InnoSetup installer, чтобы отобразить на одной странице мастера установки выбор директории программы, группу в меню Пуск и задачу создания ярлыка на рабочем столе, упростив и сделав более элегантным мастера установки.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Инсталяция ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:01:12/0.0035080909729004/0