所以问题是这样的:我在这里问了一个问题:如何只允许安装到特定文件夹?
我该如何修改它,例如,我要安装 3 个文件,其中 2 个是可选的,并且只有在存在某个文件/文件夹时才可以安装。如果不满足条件,我想将在列表中选择它们的选项变灰?
先感谢您。佐尔特
所以问题是这样的:我在这里问了一个问题:如何只允许安装到特定文件夹?
我该如何修改它,例如,我要安装 3 个文件,其中 2 个是可选的,并且只有在存在某个文件/文件夹时才可以安装。如果不满足条件,我想将在列表中选择它们的选项变灰?
先感谢您。佐尔特
我会尝试执行以下操作。它将访问组件列表项,通过其索引禁用和取消选中它们,从该部分的顺序中获取的从 0 开始的数字是多少[Components]
。没有fixed
标志的项目(如本例)默认启用,因此您需要检查是否不满足条件。您还可以查看commented version
此帖子的内容:
[Components]
Name: Component1; Description: Component 1
Name: Component2; Description: Component 2
Name: Component3; Description: Component 3
[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectComponents then
if not SomeCondition then
begin
WizardForm.ComponentsList.Checked[1] := False;
WizardForm.ComponentsList.ItemEnabled[1] := False;
WizardForm.ComponentsList.Checked[2] := False;
WizardForm.ComponentsList.ItemEnabled[2] := False;
end;
end;
上述解决方案至少有一个弱点。[Components]
当您将 设置ComponentsList.Sorted
为 True时,索引可能会从该部分的原始顺序打乱。如果你不
使用它,使用上面的代码可能就足够了,如果是,那就更复杂了。
没有简单的方法来获取组件名称(它TSetupComponentEntry
在每个项目的内部存储为对象ItemObject
),只有描述,所以这里有另一种方法来做同样的事情,不同之处在于项目索引是通过它们的描述来搜索的指定的。
procedure CurPageChanged(CurPageID: Integer);
var
Index: Integer;
begin
if CurPageID = wpSelectComponents then
if not SomeCondition then
begin
Index := WizardForm.ComponentsList.Items.IndexOf('Component 2');
if Index <> -1 then
begin
WizardForm.ComponentsList.Checked[Index] := False;
WizardForm.ComponentsList.ItemEnabled[Index] := False;
end;
Index := WizardForm.ComponentsList.Items.IndexOf('Component 3');
if Index <> -1 then
begin
WizardForm.ComponentsList.Checked[Index] := False;
WizardForm.ComponentsList.ItemEnabled[Index] := False;
end;
end;
end;