Inno Setup如何修改自定义选项页中已有单选按钮的标题
嗨Klaus,完全不用费劲从头创建自定义页面!Inno Setup早就给咱们留好了直接修改已创建控件标题的方法,几步就能实现你要的效果~
核心思路:复用已创建的单选按钮,动态修改标题
你只需要先把要修改的单选按钮“标记”出来(给它起个名字或者保存控件引用),然后在用户完成输入后,触发代码更新它的标题就好。
步骤1:给单选按钮设置标识(保存引用或命名)
在你创建选项页的代码里,别光创建单选按钮,把它赋值给一个全局变量,或者给它设置Name属性,这样后续代码能找到它。比如:
var // 声明全局变量,用来保存单选按钮和输入框的引用 CustomRadioBtn: TRadioButton; InputEdit: TEdit; MyOptionPage: TWizardPage; procedure InitializeWizard; var InputPage: TWizardPage; begin // 先创建输入页,保存输入框引用 InputPage := CreateInputQueryPage(wpWelcome, '输入编号', '请输入你的编号', '请输入格式如100-701的编号:'); InputEdit := InputPage.Add('编号:', False); // 创建选项页和单选按钮 MyOptionPage := CreateCustomPage(wpWelcome, '选择类型', '请选择安装类型'); CustomRadioBtn := TRadioButton.Create(MyOptionPage.Surface); CustomRadioBtn.Parent := MyOptionPage.Surface; CustomRadioBtn.Top := 10; CustomRadioBtn.Left := 10; CustomRadioBtn.Caption := '自定义(待修改)'; // 初始标题 CustomRadioBtn.Checked := True; // 默认选中 // 再创建Standard单选按钮 with TRadioButton.Create(MyOptionPage.Surface) do begin Parent := MyOptionPage.Surface; Top := CustomRadioBtn.Top + CustomRadioBtn.Height + 8; Left := 10; Caption := 'Standard'; end; end;
步骤2:在合适的时机更新标题
当用户输入完内容并切换到选项页时,我们就可以更新单选按钮的标题了。用CurPageChanged事件最合适——每次页面切换都会触发这个事件,我们只需要判断当前是不是选项页就行:
procedure CurPageChanged(CurPageID: Integer); var UserInput: String; begin // 先拿到用户输入的内容 UserInput := Trim(InputEdit.Text); // 判断当前页面是不是我们的选项页 if CurPageID = MyOptionPage.ID then begin if UserInput <> '' then // 直接修改单选按钮的Caption属性,Inno Setup会自动处理选中时的(*)标记 CustomRadioBtn.Caption := UserInput else // 如果用户没输入,恢复初始标题 CustomRadioBtn.Caption := '自定义(待修改)'; end; end;
补充:如果没保存控件引用怎么办?
要是你之前没给单选按钮设置全局变量,也可以通过控件的Name属性来查找它:
// 记得在创建单选按钮时加上这一行:CustomRadioBtn.Name := 'MyCustomRadio'; procedure CurPageChanged(CurPageID: Integer); var TargetRadioBtn: TRadioButton; UserInput: String; begin UserInput := Trim(InputEdit.Text); if CurPageID = MyOptionPage.ID then begin // 通过Name查找控件 TargetRadioBtn := TRadioButton(WizardForm.FindControl('MyCustomRadio')); if Assigned(TargetRadioBtn) and (UserInput <> '') then TargetRadioBtn.Caption := UserInput; end; end;
最后说明
这样修改后,当用户输入100-701并切换到选项页时,选中的单选按钮就会显示(*) 100-701,未选中时是( ) 100-701,和Standard的显示风格完全一致,完全不用重新做页面~
内容的提问来源于stack exchange,提问作者gromit72
相关产品推荐
相关产品推荐

