Inno setup 组件存在消息框太大-InnoSetup

Inno setup 组件存在消息框太大-InnoSetup,inno-setup,Inno Setup,我有一个包含80多个选项的组件列表,用户可以从中选择并安装。 安装程序会记住以前安装的组件并自动检查组件,现在如果用户取消选择全部,则会显示“组件存在”警告消息框。 由于用户取消选择了所有80个选项,列表变长,消息框超出屏幕空间,用户现在被卡住。 我知道消息中有警告,它包含警告消息的文本,并将一个参数作为%1 是否有一种方法可以更改参数值,而不是将所有选项列在单独的行中,我希望它们以逗号分隔? 或者我是否可以在消息框中设置滚动条? 请提供帮助不,此消息是内部消息,如果不修改Inno自己的源代码



我有一个包含80多个选项的组件列表,用户可以从中选择并安装。

安装程序会记住以前安装的组件并自动检查组件,现在如果用户取消选择全部,则会显示“组件存在”警告消息框。

由于用户取消选择了所有80个选项,列表变长,消息框超出屏幕空间,用户现在被卡住。

我知道消息中有警告,它包含警告消息的文本,并将一个参数作为%1

是否有一种方法可以更改参数值,而不是将所有选项列在单独的行中,我希望它们以逗号分隔?

或者我是否可以在消息框中设置滚动条?


请提供帮助

不,此消息是内部消息,如果不修改Inno自己的源代码,您无法对其进行自定义

在这种情况下,用户不应该完全陷入困境——他们应该能够按ESC键返回到组件选择窗口,然后再次选择所有内容

避免此问题的一个简单方法是,一旦安装,不允许用户取消选择组件。您可以使用以下代码来完成此操作:

var
  InstalledComponentsDisabled: Boolean;

procedure CurPageChanged(CurPageId: Integer);
var
  i: Integer;
begin
  if (CurPageId = wpSelectComponents) and
     (WizardForm.PrevAppDir <> '') and
     not InstalledComponentsDisabled then begin
    InstalledComponentsDisabled := True;
    for i := 0 to WizardForm.ComponentsList.Items.Count - 1 do begin
      if WizardForm.ComponentsList.Checked[i] then begin
        WizardForm.ComponentsList.ItemEnabled[i] := False;
      end;
    end;
  end;
end;
var
InstalledComponents禁用:布尔值;
过程CurPageChanged(CurPageId:Integer);
变量
i:整数;
开始
如果(CurPageId=wpSelectComponents)和
(WizardForm.PrevAppDir“”)和
未安装组件禁用,然后开始
InstalledComponentsDisabled:=真;
对于i:=0的WizardForm.ComponentsList.Items.Count-1,则不开始
如果选中了WizardForm.ComponentsList
WizardForm.ComponentsList.ItemEnabled[i]:=False;
结束;
结束;
结束;
结束;
这与在升级中安装任何东西的效果相似
已修复


另一种选择是在所有组件上放置
disablenouninstallwarning
,然后自己完全实现messagebox,在页面上添加一点关于永久删除组件的静态文本警告,甚至做一些实际支持删除组件的事(例如
[InstallDelete]
entries或unishs)。

你好,米拉尔,谢谢分享你的想法。我不想禁用所选组件,因为升级时可能会出现他们只需要某些组件的情况。有没有办法在消息框上添加滚动条?如果没有,当我在所有组件上添加DisableOnInstallWarning时,当用户取消选择all时,会出现一个空消息框,如何隐藏该消息框?有没有办法隐藏消息框?对于大多数应用程序,让用户安装应用程序的某个版本,然后升级单个组件,但将其他组件保留在较旧的版本,这通常是一个坏主意,如果用户取消组件标记并忽略警告,则会发生这种情况。