如果在 Inno Setup 中没有选择组件,如何禁用下一步按钮?

How to disable Next button if no component is selected in Inno Setup?

我有三个组件,如果用户 select 任何组件,它都会进行安装。现在,如果用户没有 select 任何组件,我想禁用“下一步”按钮。

我正在尝试 if not IsComponentSelected('xxx'),但它不起作用。谁能帮帮我??

没有简单的方法可以在组件选择更改时更新 Next 按钮状态。

一种更简单的方法是在单击 下一步 按钮时显示一条消息:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;

  if CurPageID = wpSelectComponents then
  begin
    if WizardSelectedComponents(False) = '' then
    begin
      MsgBox('No component selected', mbInformation, MB_OK);
      Result := False;
    end;
  end;
end;

如果您坚持禁用 下一步 按钮,请使用:

var
  TypesComboOnChangePrev: TNotifyEvent;

procedure ComponentsListCheckChanges;
begin
  WizardForm.NextButton.Enabled := (WizardSelectedComponents(False) <> '');
end;

procedure ComponentsListClickCheck(Sender: TObject);
begin
  ComponentsListCheckChanges;
end;

procedure TypesComboOnChange(Sender: TObject);
begin
  { First let Inno Setup update the components selection }
  TypesComboOnChangePrev(Sender);
  { And then check for changes }
  ComponentsListCheckChanges;
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.OnClickCheck := @ComponentsListClickCheck;

  { The Inno Setup itself relies on the WizardForm.TypesCombo.OnChange, }
  { so we have to preserve its handler. }
  TypesComboOnChangePrev := WizardForm.TypesCombo.OnChange;
  WizardForm.TypesCombo.OnChange := @TypesComboOnChange;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectComponents then
  begin
    ComponentsListCheckChanges;
  end;
end;

要了解为什么这么小的任务需要这么多代码,请参阅