我添加了一个InputOptionWizardPage来选择任务。这很好,但我想添加一些自定义功能。一项任务取决于另一项任务,因此如果选中第二个复选框,则应检查第一个复选框并显示为灰色。
为此,我需要访问复选框的属性。我找到了使用完全自定义页面执行此操作的方法,我将自己明确地创建复选框,但这将是很多工作,因为我到目前为止的大部分内容都令人满意。
如何使用MyInputOptionWizardPage.Add('This will add a checkbox with this caption')
?
答案 0 :(得分:11)
试图直接回答您的问题。
我怀疑您使用了CreateInputOptionPage()
,它返回TInputOptionWizardPage
这是你提到的'.Add('example')`方法。
TInputOptionWizard
下降TWizardPage
,其来自TComponent
,其中包含您需要的方法。
更新:替换原始代码,此示例基于对ScriptClasses_C.pas InnoSetup源代码中可用选项的审核。我原来的例子我认为
个人控制的TRadioButton
和TCheckBox
。他们改为使用一个名为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;