2009-12-31 8 views
6

내 질문에 역사에서 볼 수 있듯이 오픈 소스가 될 전자 책 관리자를 개발 중이며 대략 10 일 후에 출시 할 예정이지만 TRadioGroup이 있습니다.
TRadioGroup Used On My Form http://img85.imageshack.us/img85/1830/radiogroup.pngTRadioGroup에서 어떤 라디오 버튼이 선택 되었습니까?

그리고 나는이 TRadioGroup과 연결된 "Integer"변수에 somethings를 저장하려고합니다. > 변수

맞춤 2xWidth에 저장해야합니다 수 - - 기본 -> 0
맞춤

TRadioButton의

캡션 :

나는 이런 if 기능을 할 필요가 2xHeight -> 1
너비에 맞추기 -> 2
높이에 맞추기 -> 3

하지만 방금 TRadioGroupTRadioButton을 한 번 사용했습니다. C#과 다른 점은 20 번 이상 사용했습니다.

var 
    num: Integer; 

begin 
    if(TRadioButton1 checked?) 
    begin 
    num := 0; 
    end; 
end. 

나는 if 함수의 괄호 안에 넣을 필요가있는 무엇 : 그것을 수행 할 작업을 이미 수행하는 방법을 알고 있기 때문에 그 때 나는, 나는 경우 기능에 둘 필요가 무엇인지 알고 싶어?

추신 : 나는이 작은 프로젝트에서 나를 도운 사람들을 위해 프로그램에 크레딧을 넣을 것이다.

+0

질문의 역사에서 나는 GCC의 프런트 엔드를 작성하고 있다고 생각했습니다. 전자 책 관리자가 C 컴파일러를 호출해야하는 이유는 무엇입니까? –

+0

내 eBook 관리자의 새로운 기능입니다. –

답변

9

TRadioButton에는 Checked 속성이 있습니다. 그러나 TRadioGroup에는 ItemIndex 속성이 있습니다.

TRadioGroup의 항목은 TString을 사용하여 저장됩니다. 따라서 각 옵션에 개체를 연결할 수 있으며 TObject에 정수를 캐스팅하여 저장할 수 있습니다.

예 :

value := radiogroup.ItemIndex; 

또는 연관된 정수를 얻을 :

// fill the radiogroup 
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0)); 
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1)); 
radiogroup.Items.AddObject('Fit Width', TObject(2)); 
radiogroup.Items.AddObject('Fit Height', TObject(3)); 
radiogroup.ItemIndex := 0; 

가 현재 설정 읽으려면 귀하의 경우에는

index := radiogroup.ItemIndex; 
Assert(index>=0); // Sanity check 
value := Integer(radiogroup.Items.Objects[index]); 

를, 값이 0 (3)에 있습니다 그래서 ItemIndex를 사용할 수 있습니다.

메모로 if는 함수가 아닙니다. 함수는 입력 매개 변수를 기반으로 값을 반환하는 코드 조각입니다. If는 실행할 수있는 명령문 인 명령문입니다. if 문은 if 조건에 따라 다른 명령문을 실행할 수 있으므로 특별합니다.

+0

좋아,하지만이 코드를 어떻게 'Integer'에 저장하는 데 사용할 수 있습니까? 그 중 하나만 선택하면됩니다. –

+1

너비에 맞추기를 선택한 경우 2xWidth를 선택하면 ItemIndex = 2, ItemIndex = 0 등이됩니다. –

+0

대단히 고마워요! –

5

조금만 팁 : 설정 .ItemIndex은 키보드 포커스를 라디오 항목으로 보내지 않습니다. 문제를 해결하는 방법을 알고 있습니다. 미리 읽으십시오.

.ItemIndex을 설정하여 RadioGroup의 라디오 코드를 선택하는 대신 라디오 항목에 포커스를 보내서 수행하는 것이 좋습니다. 매우 분명합니다. 즉, 전체 라디오 그룹이 아닌 라디오 항목에만 초점을 맞추는 것을 의미합니다.

대신에 : radiogroup.itemindex:=TheIndex;

하면이로 수행 TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

그것은 라디오 항목이 선택 될 수 있도록하고 에 키보드 포커스를 보내, 그래서 그것을 감싸 네 점선 사각형을 표시합니다 마치 사용자가 클릭 한 것처럼

주 1 : 실제로는 키보드 커서 키를 사용하여 .ItemIndex을 설정하고 라디오 항목에 포커스를 보내는 동작을 비교하십시오.

주 2 : TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;을 사용하는 경우 .ItemIndex을 설정하지 않아도됩니다.

나 같은 문제가있는 사람을 돕기 위해 코드로 설정해야 할 때 예를 들어 원형 키보드의 동작을 피하기 위해 예를 들어 마지막 라디오 항목이 선택되었을 때 마지막 라디오 항목을 유지하고 키보드 오른쪽 커서가 눌려지면 처음과 동일하게됩니다.

+1

뛰어난 관찰! – TomR

+0

이 멋진 논리로 인해 OnClick 이벤트를 기반으로 한 루프에서 멈추는 형태의 문제가 해결되었습니다. 감사! –

관련 문제