【问题标题】:Inno Setup - Pascal Script - Conditionally hide/show a taskInno Setup - Pascal 脚本 - 有条件地隐藏/显示任务
【发布时间】:2016-08-18 06:26:50
【问题描述】:

这是我的任务列表:

[Tasks]
Name: "D3D"; Description: "Install D3D Engine"; GroupDescription: "Engines:"
Name: "GL"; Description: "Install OpenGL Engine"; GroupDescription: "Engines:"; Flags: unchecked
Name: "SW"; Description: "Install Software Engine"; GroupDescription: "Engines:"; Flags: unchecked
Name: "DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the Launcher"; GroupDescription: "{cm:AdditionalIcons}"
Name: "DesktopIconD3D"; Description: "{cm:CreateDesktopIcon} for the D3D Engine"; GroupDescription: "{cm:AdditionalIcons}"
Name: "DesktopIconGL"; Description: "{cm:CreateDesktopIcon} for the OpenGL Engine"; GroupDescription: "{cm:AdditionalIcons}"
Name: "DesktopIconSW"; Description: "{cm:CreateDesktopIcon} for the Software Engine"; GroupDescription: "{cm:AdditionalIcons}"

现在,如果未选择名为 {engine} 的任务,我想要实现的是隐藏名为 DesktopIcon{engine} 的任务。

问题当我隐藏其中一项任务时,索引列表发生变化,我需要他们专门引用它们。

【问题讨论】:

  • 旁注:{cm:CreateDesktopIcon} for the D3D Engine - 您正在将可本地化的字符串与硬编码的字符串结合起来。这不是一个好方法。

标签: inno-setup pascalscript


【解决方案1】:

我确信有办法解决您的索引问题。但是您没有向我们展示删除任务的代码或引用任务的代码。所以我们无法为您提供帮助。

无论如何,隐藏任务并不是解决这个问题的常用方法。您可以使用内置的任务层次结构来解决关系。或者您可以禁用任务,而不是删除它们。


使“图标”任务成为相应“引擎”任务的子任务。

[Tasks]
Name: "DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the Launcher"
Name: "D3D"; Description: "Install D3D Engine"; GroupDescription: "Engines:"; Flags: checkablealone
Name: "D3D\DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the D3D Engine"
Name: "GL"; Description: "Install OpenGL Engine"; GroupDescription: "Engines:"; Flags: unchecked checkablealone
Name: "GL\DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the OpenGL Engine"
Name: "SW"; Description: "Install Software Engine"; GroupDescription: "Engines:"; Flags: unchecked checkablealone
Name: "SW\DesktopIcon"; Description: "{cm:CreateDesktopIcon} for the Software Engine"

这使得 Inno Setup 在取消选中父“引擎”任务时自动取消选中子“图标”任务。

注意引擎任务中的checkablealone 标志。


如果未选中相应的“引擎”任务,则禁用“图标”任务。

procedure UpdateIconTask(IconIndex: Integer; EngineIndex: Integer);
begin
  WizardForm.TasksList.ItemEnabled[IconIndex] := WizardForm.TasksList.Checked[EngineIndex];
  if not WizardForm.TasksList.Checked[EngineIndex] then
  begin
    WizardForm.TasksList.Checked[IconIndex] := False;
  end;
end;

procedure UpdateIconTasks();
begin
  UpdateIconTask(6, 1);
  UpdateIconTask(7, 2);
  UpdateIconTask(8, 3);
end;

procedure TasksListClickCheck(Sender: TObject);
begin
  UpdateIconTasks();
end;

procedure InitializeWizard();
begin
  WizardForm.TasksList.OnClickCheck := @TasksListClickCheck;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectTasks then
  begin
    { Initial update }
    UpdateIconTasks();
  end;
end;

在 Inno Setup 6 中,除了使用索引之外,您还可以使用带有 WizardIsTaskSelectedWizardSelectTasks 的任务名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2021-08-20
    • 2021-01-21
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多