【问题标题】:Inno Setup using AllowGrayed使用 AllowGrayed 的 Inno 设置
【发布时间】:2012-09-27 18:56:56
【问题描述】:

我正在尝试将 AllowGrayed 设置为 False,根据 Inno Setup 站点,这似乎应该如何完成,但在编译时我不断收到“Unknown Identifier ''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);

感谢您的帮助。

【问题讨论】:

  • 这显然是 InnoSetup 文档中的一个错误。要禁用TNewCheckListBox 中的特定复选框,您可以在AddCheckBox 方法中指定启用状态或显式使用ItemEnabled 属性。你为什么将AllowGrayed 初始化为 False 呢?
  • 我不想禁用该复选框。我想禁用 Option2 复选框上的灰色状态,因为它是 Option3 的父项。选中选项2并opect3不是,option2显示为灰色的校验标记,该校验标记使用户混淆,因为它看起来像它的盒子也没有启用。 span>
  • 如果您有一个父项的多个子项,那么您必须在父项上具有灰色状态。如果您只有一个父项的子项,那么将其设为子项是没有意义的。
  • 如果我想给用户一个他们可以安装的可选程序依赖于另一个程序,你会建议我做什么?一个子项目似乎是要走的路。
  • 也在Inno discussion groups上询问

标签: installation inno-setup pascal


【解决方案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;

【讨论】:

  • 这仍然没有提供“非灰色”复选框。也许这是不可能的..
  • 但是你为什么要非灰色复选框呢?当您的父母有两个孩子并且只选中一个孩子时,父母应该是灰色的。从用户的角度来看,这就是我所期望的。
  • 我不同意,我同意.. 但 OP 似乎确实想要它。
  • 谢谢我完全忽略了这一点。我想我必须为复选框尝试其他方法。
  • @user1704321,你想要的都是可能的,但不会误导用户吗?
【解决方案2】:

这个怎么样(标准组件的语法;如果你愿意,你可以很容易地适应基于代码的页面):

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

仅将文件和其他条目与两个子组件相关联——不与父组件相关联。理论上,您现在应该有一个设置,如果没有主要组件,就不可能选择可选组件,并且两者看起来是独立的,但实际上是某个更大系统的一部分(当可选组件不是时,它只是部分安装)已安装,但不会影响主要组件本身)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多