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
相关产品推荐
相关产品推荐

