2010-04-03 3 views
0

이것은 inno setup의 코드 섹션입니다. 내 의도는 한 번에 두 개의 체크 박스를 선택하는 것입니다. 그러나이 코드는 첫 번째 확인란을 클릭 할 때 오류를 반환합니다.체크 박스 :: 한번에 하나씩 선택하십시오

[코드]

procedure CheckBoxOnClick(Sender: TObject); 
var 
Box2,CheckBox: TNewCheckBox; 
begin 
if CheckBox.Checked then ///error:"Could not call proc" [sud it be global if then how to or what to change?] 
BEGIN 
    CheckBox.State := cbUnchecked; 
    Box2.State := cbChecked; 
END else 
BEGIN 
    CheckBox.State := cbChecked; 
    Box2.State := cbUnchecked; 
END; 
end; 

procedure Box2OnClick(Sender: TObject); 
var 
Box2,CheckBox: TNewCheckBox; 
begin 
if Box2.Checked then    ///error:same 
BEGIN 
    CheckBox.State := cbChecked; 
    Box2.State := cbUnchecked; 
END else 
BEGIN 
    CheckBox.State := cbUnchecked; 
    Box2.State := cbChecked; 
END; 
end; 

procedure CreateTheWizardPages; 
var 
    Page: TWizardPage; 
    Box2,CheckBox: TNewCheckBox; 
begin 
    { TButton and others } 

    Page := CreateCustomPage(wpWelcome, '', ''); 

    CheckBox := TNewCheckBox.Create(Page); 
    CheckBox.Top :=ScaleY(8)+ScaleX(50); 
    CheckBox.Width := Page.SurfaceWidth; 
    CheckBox.Height := ScaleY(17); 
    CheckBox.Caption := 'Do this'; 
    CheckBox.Checked := True; 
    CheckBox.OnClick := @CheckBoxOnClick; 
    CheckBox.Parent := Page.Surface; 

    Box2 := TNewCheckBox.Create(Page); 
    Box2.Top :=ScaleY(8)+ScaleX(70); 
    Box2.Width := Page.SurfaceWidth; 
    Box2.Height := ScaleY(17); 
    Box2.Caption := 'No,Thanks.'; 
    Box2.Checked := False; 
    Box2.OnClick := @Box2OnClick; 
    Box2.Parent := Page.Surface; 
end; 


procedure InitializeWizard(); 
//var 
begin 
    { Custom wizard pages } 
    CreateTheWizardPages; 
end; 

+0

어떤 언어입니까? 파스칼처럼 보입니다. 일반적인 UI 용어에서 확인란은 서로 관련이 없지만 라디오 단추는 그룹화되어 있으며 상호 배타적입니다. 아마도 당신은 라디오 버튼을 가지고있는 것입니다. – Joe

+0

이 언어는 Inno-Setup의 언어 인 PascalScript입니다. –

답변

0

.. 변경하는 오류의 원인을 알려주세요은 그 방법에 로컬로 정의 확인란을 참조하고 있다는 점이다. 이 시점에서 CheckBox가 작성되지 않았습니다. CheckBox가 정의되지 않은 경우 (가장 NIL 일 가능성이 높음)

CheckBox의 각 선언은 새 변수를 나타내며 같은 이름의 다른 변수를 참조하지 않습니다. 이는 범위 지정 규칙 때문입니다.

문제를 해결하는 한 가지 방법은 각 메서드에서 Box2 및 CheckBox의 로컬 선언을 제거하고 전역 적으로 선언하는 것입니다.