【发布时间】:2012-10-11 09:21:13
【问题描述】:
在 InnoSetup 中,我想在 Finished Page 上显示一个 ComboBox,显示已安装的组件。 您可以选择“无”或任何已安装的组件,并在单击完成时启动相关程序。
这是我目前的代码:
procedure CurPageChanged(CurPageID: Integer);
var
NewComboBox1: TNewComboBox;
begin
if (CurPageID = wpFinished) then begin
NewComboBox1 := TNewComboBox.Create(WizardForm);
with NewComboBox1 do begin
Parent := WizardForm.FinishedPage;
Left := ScaleX(256);
Top := ScaleY(208);
Width := ScaleX(145);
Height := ScaleY(21);
ItemIndex := 0;
Style := csDropDownList;
Items.Add('None');
if IsComponentSelected('1') then
Items.Add('Component 1');
if IsComponentSelected('2') then
Items.Add('Component 2');
if IsComponentSelected('3') then
Items.Add('Component 3');
end;
end;
end;
首先我想将“无”设置为自动选择。当页面显示时。我查找了许多 Pascal 论坛,但没有一个解决方案有效,例如 NewComboBox1.ItemSelected=0 (或类似的,不记得正确......)。那么我该如何实现呢?
然后我不知道如何在单击完成时启动程序。我以为
function NextButtonClick
可能会有所帮助,但设置中没有“下一步”按钮。
也许还有一个问题,因为列表是根据选择的组件创建的,所以项目 1 不是组件 1,如果没有选择组件 1,而是组件 2。
我认为可以通过使项目不可见而不是根本不创建它们来解决这个问题。
我查看了 IS 帮助文件中的 Support Classes Reference,但没有找到任何可以帮助我的内容。
期待你的回答!
【问题讨论】:
-
您将
ItemIndex设置得太早了。您需要输入组合框,然后设置项目索引。在当前代码中设置ItemIndex静默失败,因为还没有索引为 0 的项目。 -
好吧,我在最后设置了ItemIndex,现在None会自动显示!谢谢你!现在我只需要知道如何获取所选项目的价值...
-
你不会得到 value,你想打开在组合框中选择的组件 behind 的文件,不要'你呢?
-
您确实应该在
InitializeWizard()事件函数中添加控件。然后,您可以(清除并)添加所需的任何项目并在CurPageChanged(wpFinished)中选择默认值。 -
是的,每个组件都会安装一个 .exe 文件。使用 ComboBox,我想为用户提供启动已安装 .exe 文件之一的选项。
标签: select dynamic combobox inno-setup