Checkbox 将Inno安装程序中许可证向导页面上的单选按钮替换为复选框

Checkbox 将Inno安装程序中许可证向导页面上的单选按钮替换为复选框,checkbox,radio-button,custom-controls,inno-setup,wizard,Checkbox,Radio Button,Custom Controls,Inno Setup,Wizard,在不创建自定义页面的情况下,是否有简单的方法将许可证向导页面上的标准2单选按钮替换为Inno设置中的单个(选中/未选中)复选框 由于没有在许可单选按钮和某些许可复选框之间切换的设置(至少是因为在向导窗体上没有相应的组件),您需要自己创建它。 以下代码隐藏原始许可单选按钮,并在向导初始化时在同一位置创建复选框。此许可证复选框模拟其OnClick事件处理程序中的单选按钮选择,以保持其原始功能。以下是代码,允许您访问向导初始化事件范围之外的许可证复选框。如果以后不需要访问此复选框,可以使用post:

在不创建自定义页面的情况下,是否有简单的方法将许可证向导页面上的标准2单选按钮替换为Inno设置中的单个(选中/未选中)复选框

由于没有在许可单选按钮和某些许可复选框之间切换的设置(至少是因为在
向导窗体上没有相应的组件),您需要自己创建它。

以下代码隐藏原始许可单选按钮,并在向导初始化时在同一位置创建复选框。此许可证复选框模拟其
OnClick
事件处理程序中的单选按钮选择,以保持其原始功能。以下是代码,允许您访问向导初始化事件范围之外的许可证复选框。如果以后不需要访问此复选框,可以使用post:

[code]

var
  LicenseCheckBox: TNewCheckBox;

procedure OnLicenseCheckBoxClick(Sender: TObject);
var
  LicenseAccepted: Boolean;
begin
  LicenseAccepted := (Sender as TNewCheckBox).Checked;
  WizardForm.LicenseAcceptedRadio.Checked := LicenseAccepted;
  WizardForm.LicenseNotAcceptedRadio.Checked := not LicenseAccepted;
end;

procedure InitializeWizard;
begin
  WizardForm.LicenseAcceptedRadio.Hide;
  WizardForm.LicenseNotAcceptedRadio.Hide;

  LicenseCheckBox := TNewCheckBox.Create(WizardForm);
  LicenseCheckBox.Parent := WizardForm.LicensePage;
  LicenseCheckBox.Left := 0;
  LicenseCheckBox.Top := WizardForm.LicenseMemo.Top + 
    WizardForm.LicenseMemo.Height + 8;
  LicenseCheckBox.Width := WizardForm.LicenseMemo.Width;
  LicenseCheckBox.Caption := ' I accept the license agreement';
  LicenseCheckBox.OnClick := @OnLicenseCheckBoxClick;
end;

只是一个小的更新,并没有必要使用变量来实例化那个复选框…我明天会检查,但看起来还可以。最好的部分是在有许多函数和过程需要连接时保持代码清晰。没错!带有复选框实例的变量在这里是无用的,因为它没有超出
InitializeWizard
的范围。即使不需要局部变量,对于这种情况,
with
语句也足够了。当其所有者被销毁时,复选框本身将被销毁(《代码》向导表单
),但即使这种所有权也不重要,因为在您完成向导后,整个表单将被销毁,此时您将把安装程序使用的全部内存返回给系统。好的,我已经检查了,这个新的解决方案是可以的,但前一个选项在启用、禁用和隐藏复选框方面给了您更多的权力,所以将例如与许可证滚动过程相结合更容易。我认为这两种解决方案都应该被贴上“又好又快”和“更先进”的标签。事实上,第一个对我来说更好。修复了,我忘记了你之前的意图,使用许可备忘录:-)