根据Inno Setup中的组件选择禁用控件

时间:2018-03-12 18:33:08

标签: inno-setup pascalscript

我想根据所选组件在我的自定义页面(VST2DirPage)上禁用控件。我试过了这个条件:

if IsComponentSelected('VST64') then  
begin
  VST2DirPage.Buttons[0].Enabled := False;
  VST2DirPage.PromptLabels[0].Enabled := False;
  VST2DirPage.Edits[0].Enabled := False;
end

但是元素似乎总是被禁用,所以看起来它没有正确的值才能正常工作。下面的脚本:

[Types]
Name: "full"; Description: "{code:FullInstall}";
Name: "custom"; Description: "{code:CustomInstall}"; Flags: iscustom

[Components]
Name: "VST64"; Description: "64-bit VST2"; Types: full; Check: Is64BitInstallMode
Name: "VST"; Description: "32-bit VST2"; Types: full; Check: Is64BitInstallMode
Name: "VST"; Description: "32-bit VST2"; Types: full; Check: not Is64BitInstallMode

[Code]
var VST2DirPage: TInputDirWizardPage;

procedure InitializeWizard;
begin
  VST2DirPage := CreateInputDirPage(wpSelectComponents,
    'Confirm VST2 Plugin Directory', '',
    'Select the folder in which setup should install the VST2 Plugin, then click Next.',
    False, '');

  VST2DirPage.Add('64-bit folder');
  VST2DirPage.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}');
  VST2DirPage.Add('32-bit folder');
  VST2DirPage.Values[1] := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432NODE\VST,VSTPluginsPath|{pf32}\Steinberg\VSTPlugins}');

  if not Is64BitInstallMode then
  begin
    VST2DirPage.Buttons[0].Enabled := False;
    VST2DirPage.PromptLabels[0].Enabled := False;
    VST2DirPage.Edits[0].Enabled := False;
  end;
end;

1 个答案:

答案 0 :(得分:1)

甚至在显示安装程序之前就会发生

InitializeWizard event function。此时,您还不知道用户将选择哪些组件。

您必须更新控件'只有当您知道选择了哪些组件时,才会声明

  • 离开"选择组件" 页面时。
  • 或者在输入自定义页面时。

这显示了后一种方法(使用CurPageChanged event function实现):

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = VST2DirPage.ID then
  begin
    VST2DirPage.Buttons[0].Enabled := not IsComponentSelected('VST64');
    VST2DirPage.PromptLabels[0].Enabled := VST2DirPage.Buttons[0].Enabled;
    VST2DirPage.Edits[0].Enabled := VST2DirPage.Buttons[0].Enabled;
  end;
end;

请注意,上面的代码不仅会在选择组件时禁用控件。如果用户返回"选择组件" 页面并取消选择该组件,它也会重新启用它们。

另见类似问题:
Inno Setup - Change a task description label's color and have a line break