You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inno Setup组件页面滚动时出现视觉故障的解决咨询

解决Inno Setup组件页面滚动后视觉故障问题

问题描述

我的Inno Setup安装程序的组件页面存在视觉故障:未滚动时显示正常,向下滚动后界面变得混乱。我曾推测是代码问题,但在完全干净的脚本中仅重建组件部分后,问题仍然存在;尝试调整缩放选项、启用/禁用WizardStyle=modern选项均无效果。我使用过Inno Setup 6.2.0版本,也试过5.x版本,不确定是否是Windows系统的问题,请问该如何修复此故障?

故障截图:组件页面滚动后视觉故障

组件部分代码如下:

[Components]
Name: lang; Description: "lang"; Flags: fixed      
Name: lang\en; Description: "en"; Flags: exclusive
Name: lang\ge; Description: "ge"; Flags: exclusive 

Name: master; Description: "master"; Flags: fixed   
Name: master\data; Description: "data"; Flags: exclusive
Name: master\data\fix; Description: "fix for data"; 
Name: master\data\fix\1; Description: "fix 1"; Flags:  exclusive
Name: master\data\fix\2; Description: "fix 2"; Flags:  exclusive
Name: master\data\fix\3; Description: "fix 3"; Flags:  exclusive
Name: master\legacy; Description: "legacy"; Flags: exclusive; 

Name: frontend; Description: "frontend"; Flags: fixed; 
Name: frontend\1; Description: "frontend 1"; Flags: exclusive  
Name: frontend\2; Description: "frontend 2"; Flags: exclusive 
Name: frontend\3; Description: "frontend 3"; Flags: exclusive 

Name: option1; Description: "option 1"; 
Name: option2; Description: "option 2"; 
Name: option3; Description: "option 3"; 


Name: option4; Description: "option 4"; 
Name: option5; Description: "option 5"; 
Name: option6; Description: "option 6"
Name: option6\1; Description: "option 6 ver 1"; Flags: exclusive
Name: option6\2; Description: "option 6 ver 1.2"; Flags: exclusive

修复方案

1. 调整Windows显示缩放设置

  • 打开Windows设置→系统→显示,确认缩放比例是否为100%。如果是125%/150%等非标准缩放,临时改为100%后重新运行安装程序,查看故障是否消失。
  • 若需要保留非标准缩放,可在脚本的[Setup]段添加DisableHighDpiScaling=yes,强制禁用高DPI缩放适配。

2. 替换原生组件页面的绘制逻辑

原生组件列表在部分系统环境下存在渲染bug,可通过自定义向导页面替换,使用TNewCheckListBox控件实现:

[Setup]
DisableComponentsPage=yes

[Code]
var
  ComponentsPage: TWizardPage;
  CheckListBox: TNewCheckListBox;

procedure InitializeWizard;
begin
  ComponentsPage := CreateCustomPage(wpSelectDir, '选择组件', '请选择要安装的组件');
  CheckListBox := TNewCheckListBox.Create(ComponentsPage);
  CheckListBox.Parent := ComponentsPage.Surface;
  CheckListBox.Align := alClient;
  
  // 按原组件结构添加项
  CheckListBox.AddGroup('lang', '', cbGrayed, True);
  CheckListBox.AddCheckBox('en', '', False, True, True, '', '', 0);
  CheckListBox.AddCheckBox('ge', '', False, True, True, '', '', 0);
  
  CheckListBox.AddGroup('master', '', cbGrayed, True);
  CheckListBox.AddCheckBox('data', '', False, True, True, '', '', 0);
  CheckListBox.AddGroup('fix for data', '', cbUnchecked, True);
  CheckListBox.AddCheckBox('fix 1', '', False, True, True, '', '', 0);
  CheckListBox.AddCheckBox('fix 2', '', False, True, True, '', '', 0);
  CheckListBox.AddCheckBox('fix 3', '', False, True, True, '', '', 0);
  CheckListBox.AddCheckBox('legacy', '', False, True, True, '', '', 0);
  
  // 继续添加剩余组件项...
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  // 根据复选框状态设置组件安装标记,例如:
  // WizardSelectedComponents('lang\en') := CheckListBox.Checked[1];
end;

3. 更新显卡驱动

滚动后界面混乱大概率是显卡渲染兼容性问题,前往显卡厂商官网(NVIDIA/AMD/Intel)下载并安装最新驱动,重启系统后再测试安装程序。

4. 测试其他Windows环境

在不同版本的Windows系统(如Win10/Win11)或硬件设备上运行安装程序,确认是否为特定系统/硬件的兼容性问题。

内容的提问来源于stack exchange,提问作者Foma Foma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:48:21