【问题标题】:Inno Setup: TInputOptionWizardPage disabled radio buttons look partially enabled (bug?)Inno Setup:TInputOptionWizardPage 禁用单选按钮看起来部分启用(错误?)
【发布时间】:2019-04-01 00:15:57
【问题描述】:

我的 Inno Setup 脚本中有一个自定义页面,我通过执行以下操作创建了该页面:

var    
  installSelectPage: TInputOptionWizardPage;
  { ... }

procedure InitializeWizard;
begin
  installSelectPage :=
    CreateInputOptionPage(wpInfoBefore,
     'Select Destination Location', 'Where should {#MyAppName} be installed?',
     'Please select which {#MyGameName} distribution you want to mod',
     True, False);

  radioIndex_retailInstall := installSelectPage.Add('Retail/DVD');
  radioIndex_steamInstall := installSelectPage.Add('Steam');
  radioIndex_manualInstall := installSelectPage.Add('Manual Directory Selection')

然后在 InitializeWizard 过程的稍后时间,我读取了一些注册表项并禁用了未找到相应键的单选按钮:

  if not(retailInstallAvailable) then
    installSelectPage.CheckListBox.ItemEnabled[radioIndex_retailInstall] := False;

  if not(steamInstallAvailable) then
    installSelectPage.CheckListBox.ItemEnabled[radioIndex_steamInstall] := False;

这主要是可行的,但按钮的外观有一些奇怪的错误。在第一个和第二个按钮都被禁用(第三个从来没有)的机器上进行测试时,当我第一次到达这个自定义页面时,如果没有选择任何选项,它们看起来像这样:

这很微妙,但如果您仔细观察,您会注意到前两个单选按钮(不是它们的文本)看起来仍然部分启用(并且程度不同!)。

如果我然后选择第三个选项(这台机器上只有一个可用),回击然后再次下一步以刷新页面,然后按钮看起来正确:

有谁知道 Inno Setup 到底在做什么,以及如何在没有选择任何按钮的情况下让按钮看起来完全禁用?

【问题讨论】:

    标签: inno-setup pascalscript


    【解决方案1】:

    我可以重现问题。

    当焦点项目被禁用时似乎会发生这种情况。默认情况下,焦点项目是第一个。确保将 ItemIndex 设置为(第一个)启用项的索引。

    installSelectPage.CheckListBox.ItemIndex := ...;
    

    【讨论】:

    • 我最初认为它与焦点问题有关,但是当您进入此页面时,下一个按钮被突出显示并且清楚地具有程序的整体焦点(点击标签沿着后面移动,下一步和取消按钮)我没有进一步刺激。我没有意识到 CheckListBox 本身有一个成员跟踪它自己的选项的焦点。将焦点更改为我选择的任何未禁用的单选按钮确实解决了问题。还值得注意的是,底层问题可能与这篇文章有关:stackoverflow.com/q/31167028
    猜你喜欢
    • 2019-06-01
    • 2021-06-06
    • 1970-01-01
    • 2014-05-04
    • 2011-09-15
    • 2012-10-09
    • 1970-01-01
    • 2012-10-17
    • 2012-01-05
    相关资源
    最近更新 更多