挂钩标准Inno设置复选框

时间:2011-05-01 22:07:58

标签: inno-setup

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

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

如何使用MyInputOptionWizardPage.Add('This will add a checkbox with this caption')

挂钩由Inno Setup创建的复选框

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

您还可以通过父关系控制任务,它会为您提供与您要求的相似的行为,但不是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;