2017-01-03 61 views
1

我認爲這是很簡單的代碼,但事實是,我終於面臨一個問題,取回複選框和單選按鈕在TNewCheckListBox中的選中/未選中值。Inno Setup如何獲取TNewCheckListBox中的複選框或單選按鈕值?

我嘗試將複選框和單選按鈕設置爲全局實例,以便我可以在NextButtonClick事件中輕鬆訪問它。

但在這個樣品的測試,我得到

無法調用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; 

////////////////////////////////////////////////////////////////////// 

錯在這裏?
感謝您的答覆;)

回答

0

AddCheckBoxAddRadioButton方法返回Integer,不TNewCheckBox/TNewRadioButton

甚至令人驚訝的是,您的代碼編譯。它看起來像編譯器的一些缺陷。

返回的數字表示覆選框/單選按鈕的索引。使用索引以及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; 
+0

沒錯,就是它謝謝! 我已經使用這個代碼只是找到了一個解決方案通過自己: 如果CheckListBox.Checked [0], 但我覺得它更好的保持名稱實例引用「CB1」,等等。 我只是錯過了一個事實,即方法返回整數。 – BenDev

相關問題