2012-09-27 38 views
2

我想设置AllowGrayed为False,并根据Inno Setup网站,这似乎是应该如何做,但编译时,我不断收到“未知标识符”'ALLOWGRAYED'“错误。我敢肯定这是我忽略的一件简单的事情。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); 

感谢您的任何帮助。

+0

这显然是InnoSetup文档中的一个错误。要禁用'TNewCheckListBox'中的特定复选框,您可以在'AddCheckBox'方法中指定启用状态,或者显式使用'ItemEnabled'属性。为什么你将'AllowGrayed'初始化为false? – TLama

+0

我不想禁用该复选框。我想要禁用Option2复选框上的灰色状态,因为它是Option3的父项。当选项2被选中而选项3不被选中时,选项2显示为灰色的复选标记,这会让用户感到困惑,因为它看起来就像是盒子没有被启用。 – user1704321

+1

如果您有一个父项目的多个子项目,那么您必须在父项目上呈灰色状态。如果您只有一个父项目的一个子项目,那么将其作为一个子项目没有意义。 –

回答

1

TNewCheckListBox没有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; 
+0

这仍然不提供'不可格雷'复选框。也许这是不可能的。 –

+0

但为什么你想要非灰色的复选框?当你有一个有两个孩子的父母并且只检查一个孩子时,父母应该变灰。这就是我从用户的角度期待的。 – TLama

+0

我不同意,但我同意。但OP似乎想要它。 –

0

这个怎么样(语法的标准的组件,你可以适应代码 - 基于页面,如果你喜欢轻松就够了):

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

助理文件和其他项只与两个子 - 没有与父。从理论上讲,现在应该有一个设置,在没有主要组件的情况下不可能选择可选组件,并且这两个似乎是独立的,但实际上却是一些较大系统的一部分(当可选组件不是安装,但不影响主要组件本身)。