挂钩标准Inno设置复选框

tho*_*_vd 6 inno-setup

我添加了一个InputOptionWizardPage来选择任务.这很好,但我想添加一些自定义功能.一项任务取决于另一项任务,因此如果选中第二个复选框,则应检查第一个复选框并显示灰色.

为此,我需要访问复选框的属性.我找到了使用完全自定义页面执行此操作的方法,我将自己明确地创建复选框,但这将是很多工作,因为我到目前为止的大部分内容都令人满意.

如何挂钩由Inno Setup创建的复选框,使用MyInputOptionWizardPage.Add('This will add a checkbox with this caption')

Rob*_*ove 11

试图直接回答你的问题.

我怀疑你用过CreateInputOptionPage() 哪个返回一个TInputOptionWizardPage

这有你提到的'.Add('Example')`方法.

TInputOptionWizard下降TWizardPage,从哪个下降TComponent有你需要的方法.

更新:替换原始代码,此示例基于对ScriptClasses_C.pas的InnoSetup源代码中可用选项的审查 我的原始示例我认为这TRadioButtonTCheckBox个别控件的位置.他们改为一个名为的控件TNewCheckListBox.有几种方法可以解决这个问题,但最安全的方法是使用.

这个例子是一个完整的Inno安装脚本.

[Setup]
AppName='Test Date Script'
AppVerName='Test Date Script'
DefaultDirName={pf}\test
[Code]

const
 cCheckBox = false;
 cRadioButton  = true;


var
  Opt : TInputOptionWizardPage; 

function BoolToStr(Value : Boolean) : String; 
begin
  if Value then
    result := 'true'
  else
    result := 'false';
end;

procedure ClickEvent(Sender : TObject);
var
 Msg : String;
 I   : Integer;
begin
   // Click Event, allowing inspection of the Values.
    Msg := 'The Following Items are Checked' +#10#13; 
    Msg := Msg + 'Values[0]=' + BoolToStr(Opt.Values[0]) +#10#13;
    Msg := Msg + 'Values[1]=' + BoolToStr(Opt.Values[1]) +#10#13;
    Msg := Msg + 'Values[2]=' + BoolToStr(Opt.Values[2]);

    MsgBox(Msg,mbInformation,MB_OK);
end;
procedure InitializeWizard();
var
  I : Integer; 
  ControlType : Boolean;
begin
  ControlType := cCheckBox;
  Opt := CreateInputOptionPage(1,'Caption','Desc','SubCaption',ControlType, false);
  Opt.Add('Test1');
  Opt.Add('Test2');
  Opt.Add('Test3');

  // Assign the Click Event.
  Opt.CheckListBox.OnClickCheck := @ClickEvent;  
end;
Run Code Online (Sandbox Code Playgroud)


Rob*_*ove 2

您还可以通过父母关系来控制任务,它会为您提供与您要求的类似的行为,但并非 100% 相同。我知道这并不能直接回答您的问题,而是旨在为您提供一个可能更容易实施的选项。通过这种方式,您根本不必担心管理自定义对话框。

[Setup]
;This allows you to show Lines showing parent / Child Relationships
ShowTasksTreeLines=yes

[Tasks]
;Parent Tasks don't use "\"
Name: p1; Description: P1 Test; 
;Child Tasks are named ParentTaskName\ChildTaskName
;Flag don't inheritcheck:Specifies that the task 
;should not automatically become checked when its parent is checked 
Name: p1\c1; Description: C1 Test; Flags: dontinheritcheck;
Name: p1\c2; Description: C2 Test; 
;Default behavior is that child must be selected 
;when a parent is selected
;this can be overridden using the:
;doninheritcheck flag and the checkablealone flag.
Name: p2; Description: P2 Test; Flags: checkablealone;
Name: p2\c1; Description: P2-C1 Test; Flags: dontinheritcheck;
Name: p2\c2; Description: P2-C2 Test; Flags: dontinheritcheck;
Run Code Online (Sandbox Code Playgroud)