Inno Setup 如何获取 TIn CheckedListBox 中的复选框或单选按钮值?
Inno Setup How to get checkbox or radiobutton value in a TNewCheckListBox?
我认为这很容易编写代码,但事实是,我终于遇到了关于取回 TNewCheckListBox
中复选框和单选按钮的 checked/unchecked 值的问题。
我尝试将复选框和单选按钮设置为全局实例,以便我可以在 NextButtonClick
事件中轻松访问它们。
但是在这个示例测试中我得到了
Could not call proc.
[Code]
var
PageChoixComposants: TWizardPage;
CB1, CB2: TNewCheckBox;
OB1, OB2: TNewRadioButton;
procedure InitializeWizard;
var
CheckListBox: TNewCheckListBox;
begin
PageChoixComposants := CreateCustomPage(
wpWelcome, 'Custom wizard page controls', 'TNewCheckListBox');
CheckListBox := TNewCheckListBox.Create(PageChoixComposants);
CheckListBox.Width := PageChoixComposants.SurfaceWidth;
CheckListBox.Height := ScaleY(97);
CheckListBox.Flat := True;
CheckListBox.Parent := PageChoixComposants.Surface;
CB1 := CheckListBox.AddCheckBox('CB1', '', 0, True, True, False, True, nil);
OB1 := CheckListBox.AddRadioButton('CB1 OB1', '', 1, True, True, nil);
OB2 := CheckListBox.AddRadioButton('CB1 OB2', '', 1, False, True, nil);
CB2 := CheckListBox.AddCheckBox('CB2', '', 0, True, True, False, True, nil);
end;
//////////////////////////////////////////////////////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if (CurPageID=PageChoixComposants.ID) then
begin
if CB1.Checked = True then
begin
MsgBox('CB1 checked', mbInformation, MB_OK);
end;
end;
Result := True;
end;
//////////////////////////////////////////////////////////////////////
这里出了什么问题?
AddCheckBox
和 AddRadioButton
方法 return Integer
,而不是 TNewCheckBox
/TNewRadioButton
。
您的代码编译通过甚至令人惊讶。看来是编译器的一些缺陷。
returned 数字表示 checkbox/radio 按钮的索引。使用索引和 TNewCheckListBox.Checked
(或 .State
)属性 来查询 checkbox/radio 按钮状态。
正确的代码是:
var
PageChoixComposants: TWizardPage;
CheckListBox: TNewCheckListBox;
CB1, CB2: Integer;
OB1, OB2: Integer;
procedure InitializeWizard;
begin
PageChoixComposants :=
CreateCustomPage(wpWelcome, 'Custom wizard page controls', 'TNewCheckListBox');
CheckListBox := TNewCheckListBox.Create(PageChoixComposants);
CheckListBox.Width := PageChoixComposants.SurfaceWidth;
CheckListBox.Height := ScaleY(97);
CheckListBox.Flat := True;
CheckListBox.Parent := PageChoixComposants.Surface;
CB1 := CheckListBox.AddCheckBox('CB1', '', 0, True, True, False, True, nil);
OB1 := CheckListBox.AddRadioButton('CB1 OB1', '', 1, True, True, nil);
OB2 := CheckListBox.AddRadioButton('CB1 OB2', '', 1, False, True, nil);
CB2 := CheckListBox.AddCheckBox('CB2', '', 0, True, True, False, True, nil);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = PageChoixComposants.ID then
begin
if CheckListBox.Checked[CB1] then
begin
MsgBox('CB1 checked', mbInformation, MB_OK);
end;
end;
Result := True;
end;
我认为这很容易编写代码,但事实是,我终于遇到了关于取回 TNewCheckListBox
中复选框和单选按钮的 checked/unchecked 值的问题。
我尝试将复选框和单选按钮设置为全局实例,以便我可以在 NextButtonClick
事件中轻松访问它们。
但是在这个示例测试中我得到了
Could not call proc.
[Code]
var
PageChoixComposants: TWizardPage;
CB1, CB2: TNewCheckBox;
OB1, OB2: TNewRadioButton;
procedure InitializeWizard;
var
CheckListBox: TNewCheckListBox;
begin
PageChoixComposants := CreateCustomPage(
wpWelcome, 'Custom wizard page controls', 'TNewCheckListBox');
CheckListBox := TNewCheckListBox.Create(PageChoixComposants);
CheckListBox.Width := PageChoixComposants.SurfaceWidth;
CheckListBox.Height := ScaleY(97);
CheckListBox.Flat := True;
CheckListBox.Parent := PageChoixComposants.Surface;
CB1 := CheckListBox.AddCheckBox('CB1', '', 0, True, True, False, True, nil);
OB1 := CheckListBox.AddRadioButton('CB1 OB1', '', 1, True, True, nil);
OB2 := CheckListBox.AddRadioButton('CB1 OB2', '', 1, False, True, nil);
CB2 := CheckListBox.AddCheckBox('CB2', '', 0, True, True, False, True, nil);
end;
//////////////////////////////////////////////////////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if (CurPageID=PageChoixComposants.ID) then
begin
if CB1.Checked = True then
begin
MsgBox('CB1 checked', mbInformation, MB_OK);
end;
end;
Result := True;
end;
//////////////////////////////////////////////////////////////////////
这里出了什么问题?
AddCheckBox
和 AddRadioButton
方法 return Integer
,而不是 TNewCheckBox
/TNewRadioButton
。
您的代码编译通过甚至令人惊讶。看来是编译器的一些缺陷。
returned 数字表示 checkbox/radio 按钮的索引。使用索引和 TNewCheckListBox.Checked
(或 .State
)属性 来查询 checkbox/radio 按钮状态。
正确的代码是:
var
PageChoixComposants: TWizardPage;
CheckListBox: TNewCheckListBox;
CB1, CB2: Integer;
OB1, OB2: Integer;
procedure InitializeWizard;
begin
PageChoixComposants :=
CreateCustomPage(wpWelcome, 'Custom wizard page controls', 'TNewCheckListBox');
CheckListBox := TNewCheckListBox.Create(PageChoixComposants);
CheckListBox.Width := PageChoixComposants.SurfaceWidth;
CheckListBox.Height := ScaleY(97);
CheckListBox.Flat := True;
CheckListBox.Parent := PageChoixComposants.Surface;
CB1 := CheckListBox.AddCheckBox('CB1', '', 0, True, True, False, True, nil);
OB1 := CheckListBox.AddRadioButton('CB1 OB1', '', 1, True, True, nil);
OB2 := CheckListBox.AddRadioButton('CB1 OB2', '', 1, False, True, nil);
CB2 := CheckListBox.AddCheckBox('CB2', '', 0, True, True, False, True, nil);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = PageChoixComposants.ID then
begin
if CheckListBox.Checked[CB1] then
begin
MsgBox('CB1 checked', mbInformation, MB_OK);
end;
end;
Result := True;
end;