Installation 使用AllowGrayed的Inno设置

Installation 使用AllowGrayed的Inno设置,installation,inno-setup,pascal,Installation,Inno Setup,Pascal,我正在尝试将AllowGrayed设置为False,根据Inno安装站点,这似乎是应该如何完成的,但在编译时,我一直收到一个未知标识符AllowGrayed'错误。我肯定我忽略了一些简单的事情 CompCheckListBox := TNewCheckListBox.Create(CompPage); CompCheckListBox.Top := StaticText.Top + StaticText.Height + ScaleY(8); CompCheckListBox.Width :=

我正在尝试将AllowGrayed设置为False,根据Inno安装站点,这似乎是应该如何完成的,但在编译时,我一直收到一个未知标识符AllowGrayed'错误。我肯定我忽略了一些简单的事情

CompCheckListBox := TNewCheckListBox.Create(CompPage);
CompCheckListBox.Top := StaticText.Top + StaticText.Height + ScaleY(8);
CompCheckListBox.Width := CompPage.SurfaceWidth;
CompCheckListBox.Height := ScaleY(180);
CompCheckListBox.Flat := True;
CompCheckListBox.AllowGrayed := False;
CompCheckListBox.Parent := CompPage.Surface;
CompCheckListBox.AddCheckBox('Option1', '', 0, False, True, False, True, nil);
CompCheckListBox.AddCheckBox('Option2', '', 0, False, True, True, True, nil);
CompCheckListBox.AddCheckBox('Option3', '', 1, False, True, False, False, nil);
谢谢您的帮助。

没有AllowGrayed属性,因此您发现了一个文档错误。但是,我要说的是,您误用了AddCheckBox方法的ACheckWhenParentChecked参数。该参数仅针对子项而非父项设置为True。因此,请尝试通过以下方式修改脚本:

...
CompCheckListBox.AddCheckBox('Option 1', '', 0, False, False, False, True, nil);
CompCheckListBox.AddCheckBox('Option 2', '', 0, False, True, True, False, nil);
CompCheckListBox.AddCheckBox('Option 3', '', 1, False, True, False, True, nil);
CompCheckListBox.AddCheckBox('Option 4', '', 1, False, True, False, True, nil);
...
以下是参考文献中的方法原型:

function AddCheckBox(const ACaption, ASubItem: String; ALevel: Byte; AChecked,
  AEnabled, AHasInternalChildren, ACheckWhenParentChecked: Boolean; 
  AObject: TObject): Integer;

标准组件的这种语法如何;如果愿意,您可以很容易地适应基于代码的页面:

[Components]
Name: parent; Description: ...
Name: parent\main; Description: ...; Flags: fixed
Name: parent\optional; Description ...

仅将文件和其他条目与两个子组件关联,而不与父组件关联。从理论上讲,您现在应该有一个设置,在没有主组件的情况下,不可能选择可选组件,并且这两个组件看起来是独立的,但实际上是某个较大系统的一部分,当未安装可选组件时,该系统仅部分安装,但这并不影响主要组件本身。

这显然是InnoSetup文档中的一个bug。要禁用TNewCheckListBox中的特定复选框,可以在AddCheckBox方法中指定启用状态,或使用显式ItemEnabled属性。为什么要将AllowGrayed初始化为False?我不想禁用该复选框。我想在Option2复选框上禁用灰色状态,因为它是Option3的父项。当选项2被选中而选项3未被选中时,选项2将显示为灰色的复选标记,这会让用户感到困惑,因为即使复选框已启用,它看起来也未启用。如果父项有多个子项,则父项上的状态必须为灰色。如果一个父项只有一个子项,那么将其作为子项是没有意义的。如果我想给用户一个可选的程序,让他们可以根据另一个程序安装,您建议我怎么做?一个子项似乎是应该做的。在上也被问到,仍然没有提供“非灰色”复选框。也许这是不可能的…但为什么要选中不可灰显的复选框?当您有一个有两个孩子的家长,并且只选中一个孩子时,家长应该是灰色的。从用户的角度来看,这就是我所期望的。我不这样认为,我也同意。。但是OP似乎确实想要它。谢谢,我完全忽略了这一点。我想我必须为复选框尝试其他方法。@user1704321,您想要的是可能的,但这对用户来说不是误导吗?