Inno Setup的:功能选择组件(Inno Setup: Function to select

2019-10-21 07:15发布

我有一个小问题。 我需要的,当你选择一个或两个分量的页面显示。 但是,只有一个单一组分似乎有效果的另一个是不行的。 我离开那个我工作的代码。

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Types]
Name: full; Description: Full installation
Name: compact; Description: Compact installation
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: program; Description: Program Files; Types: full compact custom; Flags: fixed
Name: help; Description: Help File; Types: full
Name: readme; Description: Readme File; Types: full
Name: readme\en; Description: English; Flags: exclusive
Name: readme\de; Description: German; Flags: exclusive

[Code]
var
  Page1: TWizardPage;

Procedure InitializeWizard();
begin
  Page1:= CreateCustomPage(wpSelectComponents, 'Custom wizard page 1', 'TButton');
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Case PageID of
    Page1.ID: Result:= not IsComponentSelected('help');
    Page1.ID: Result:= not IsComponentSelected('readme\de'); //  It does not work
  end;
end;

问候和感谢提前。

Answer 1:

如果您需要编写更复杂的条件下,使用该逻辑运算符。 在这种情况下,你想使用and操作:

Result := not IsComponentSelected('help') and not IsComponentSelected('readme\de');

这可以理解为:

如果没有选择“帮助”部分和“自述\德”组件不选为好跳到页面。 在人类语言可能是,如果未选中任何“帮助”,也不是“自述\德”成分跳跃页。

你的代码,这样可以简化为这样的:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  // skip the page if it's our custom page and neither "help" nor "readme\de"
  // component is selected, do not skip otherwise
  Result := (PageID = Page1.ID) and (not IsComponentSelected('help') and
    not IsComponentSelected('readme\de'));
end;

最后需要注意(和问题的可能原因),谨防在相同的标识符的切换case声明。 编译器不应该让你这样做,但遗憾的是,如该编译:

var
  I: Integer;
begin
  I := 1;
  case I of
    1: MsgBox('Case switch 1.1', mbInformation, MB_OK);
    1: MsgBox('Case switch 1.2', mbInformation, MB_OK);
  end;
end;

但只有第一个开关量语句执行,所以你永远不会看到消息“案例切换1.2”。



文章来源: Inno Setup: Function to select a component
标签: inno-setup