如何在 Inno Setup TNewCheckListBox 中获取复选框或单选按钮的值?

Ben*_*Dev 3 checkbox inno-setup checkboxlist radio-button pascalscript

我认为这很容易编码,但事实是我最终面临着获取TNewCheckListBox.

我尝试将复选框和单选按钮设置为全局实例,以便我可以在NextButtonClick事件中轻松访问它。

但在这个示例测试中我得到

无法调用过程。

[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;

//////////////////////////////////////////////////////////////////////
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?

Mar*_*ryl 6

和方法返回,而AddCheckBox不是/ 。AddRadioButtonIntegerTNewCheckBoxTNewRadioButton

甚至令人惊讶的是您的代码能够编译。看起来编译器有一些缺陷。

返回的数字表示复选框/单选按钮的索引。使用索引和TNewCheckListBox.Checked(或.State) 属性来查询复选框/单选按钮状态。

正确的代码是:

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;
Run Code Online (Sandbox Code Playgroud)