Inno Setup中如何在InputOptionPage单选按钮旁/下方放置图片?
Inno Setup:给画质选项单选按钮添加预览图片
核心思路
TInputOptionWizardPage的选项本质是TRadioButton控件,嵌套在页面的CheckListBox容器里。你可以通过索引直接获取对应选项的单选按钮,再根据它的位置定位预览图片。
完整实现代码
首先在代码段开头声明所需变量:
[Code] var GraphicsSettingsPage: TInputOptionWizardPage; LowSettingsPic, HighSettingsPic: TBitmapImage;
修改InitializeWizard过程,完成页面创建、图片加载与布局:
procedure InitializeWizard; var LowRadio, HighRadio: TRadioButton; PicWidth, PicHeight: Integer; begin // 创建画质设置页面 GraphicsSettingsPage := CreateInputOptionPage( PlayerBasicsWizardPage.ID, '画质设置', '选择适合您设备的画质配置', '低配置适配性能较弱设备,高配置提供最佳视觉效果', True, False); // 添加选项 GraphicsSettingsPage.Add('低画质'); GraphicsSettingsPage.Add('高画质'); // 获取对应单选按钮控件 LowRadio := TRadioButton(GraphicsSettingsPage.CheckListBox.Items.Objects[0]); HighRadio := TRadioButton(GraphicsSettingsPage.CheckListBox.Items.Objects[1]); // 设置图片尺寸(根据实际图片调整) PicWidth := 200; PicHeight := 150; // 加载低画质预览图 LowSettingsPic := TBitmapImage.Create(GraphicsSettingsPage); LowSettingsPic.Parent := GraphicsSettingsPage.Surface; LowSettingsPic.Bitmap.LoadFromFile(ExpandConstant('{tmp}\low_settings.bmp')); LowSettingsPic.Width := PicWidth; LowSettingsPic.Height := PicHeight; // 图片放在低画质单选按钮右侧,间距10像素 LowSettingsPic.Left := LowRadio.Left + LowRadio.Width + 10; LowSettingsPic.Top := LowRadio.Top; // 加载高画质预览图 HighSettingsPic := TBitmapImage.Create(GraphicsSettingsPage); HighSettingsPic.Parent := GraphicsSettingsPage.Surface; HighSettingsPic.Bitmap.LoadFromFile(ExpandConstant('{tmp}\high_settings.bmp')); HighSettingsPic.Width := PicWidth; HighSettingsPic.Height := PicHeight; // 图片放在高画质单选按钮右侧,间距10像素 HighSettingsPic.Left := HighRadio.Left + HighRadio.Width + 10; HighSettingsPic.Top := HighRadio.Top; end;
关键细节说明
- 获取单选按钮:
GraphicsSettingsPage.CheckListBox.Items.Objects[Index]返回对应索引的控件对象,强制转换为TRadioButton即可操作,索引从0开始,对应添加选项的顺序。 - 图片布局:必须将
Parent设置为GraphicsSettingsPage.Surface,否则图片无法显示在页面上;通过Left和Top属性与单选按钮对齐。 - 可选优化:若只想显示当前选中项的图片,可添加单选按钮点击事件切换可见性:
procedure RadioButtonClick(Sender: TObject); begin LowSettingsPic.Visible := (Sender = LowRadio); HighSettingsPic.Visible := (Sender = HighRadio); end; // 在InitializeWizard中绑定事件 LowRadio.OnClick := @RadioButtonClick; HighRadio.OnClick := @RadioButtonClick; // 初始化时显示默认选中项的图片 if GraphicsSettingsPage.SelectedIndex = 0 then HighSettingsPic.Visible := False else LowSettingsPic.Visible := False;
注意事项
- 确保
{tmp}目录存在对应BMP图片,可在[Files]段提前解压:
[Files] Source: "path\to\low_settings.bmp"; DestDir: "{tmp}"; Flags: dontcopy Source: "path\to\high_settings.bmp"; DestDir: "{tmp}"; Flags: dontcopy
- 优先使用BMP格式图片,Inno Setup的
TBitmapImage对其支持最好。
内容的提问来源于stack exchange,提问作者jmarkman446
相关产品推荐
相关产品推荐

