我只有在安装了特定组件的情况下才能安装文件。但我也允许自定义安装。因此,如果还检查了特定组件,则需要自动检查组件(反之亦然,如果未启用其他组件则禁用)。我知道我可以简单地将文件本身附加到特定组件,但我想向用户提供有关正在安装此先决条件的反馈。
那么,短版本:如何根据组件'B'的状态自动检查组件'A'?
答案 0 :(得分:1)
检查B的简单实现,如果选中A:
[Components]
Name: "A"; Description: "A"
Name: "B"; Description: "B"
[Code]
const
ItemA = 0;
ItemB = 1;
var
PrevItemAChecked: Boolean;
TypesComboOnChangePrev: TNotifyEvent;
procedure ComponentsListCheckChanges;
begin
if PrevItemAChecked <> WizardForm.ComponentsList.Checked[ItemA] then
begin
if WizardForm.ComponentsList.Checked[ItemA] then
WizardForm.ComponentsList.Checked[ItemB] := True;
PrevItemAChecked := WizardForm.ComponentsList.Checked[ItemA];
end;
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;
{ Remember the initial state }
{ (by now the components are already selected according to }
{ the defaults or the previous installation) }
PrevItemAChecked := WizardForm.ComponentsList.Checked[ItemA];
end;
以上内容基于Inno Setup ComponentsList OnClick event。
您也可以使用与Inno Setup Uncheck a task when another task is checked类似的组件名称和描述,而不是使用索引。