C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22756] 늦었지만 코드에 대한 간단한 설명입니다.
Julien [julien] 946 읽음    2002-11-21 12:07
어려우셨다니 죄송하네요..
이미 해결했으니 상관은 없겠지만
어려웠다고 하니 간단한 설명을 넣도록 하겠습니다.
비슷한 이름의 여러 콤포넌트를 사용하는 다른 부분에서도 도움이 많이 될 것입니다.

두개의 RadioGroup를 폼에 둡니다.
그럼 각각의 Name이 RadioGroup1과 RadioGroup2가 될 것입니다.
여기서 RadioGroup1의 OnClick이벤트를 마우스로 더블클릭합니다.
그럼 코드가 만들어지겠지요?
거기에 코드를 넣고 RadioGroup2의 OnClick이벤트는 더블클릭하지 마시고
콤보박스를 열어서 RadioGroup1Click이라는 이벤트와 연결합니다.

해당영역에 들어가는 코드는...

TRadioGroup* tmp = dynamic_cast<TRadioGroup*>(Sender);

-> 메시지를 발생시킨 객체가 TObject* Sender를 통해서 핸들러함수로 전달이 됩니다.
-> 여기서 이 함수를 호출하는 콤포넌트는 TRadioGroup클래스의 인스턴스이므로
-> Sender를 TRadioGroup로 타입캐스팅을 합니다.
-> 보통은 TRadioGroup* tmp = (TRadioGroup*)Sender; 라고 많이 하지요.
-> 그런데 dynamic_cast라는 매크로는 캐스팅할 수 없는 경우는 NULL을 리턴합니다.
-> 따라서 호출한 객체의 타입에 따라서 실행여부를 결정할 수 있도록
-> 캐스팅이 제대로 되는 지 확인을 해 볼 수 있겠죠?(여기서는 생략했지만...)
-> 간단히 예를 들자면
-> TRadioGroup* tmp = dynamic_cast<TRadioGroup*>(Sender);
-> if(tmp == NULL) return;

int idx = 3 - String(tmp->Name.AnsiLastChar()).ToInt();

-> tmp->Name은 RadioGroup1 이나 RadioGroup2 의 값을 가지게 되는 AnsiString 변수입니다.
-> 이 값의 마지막 캐릭터를 읽고(AnsiLastChar()) 그 값을 정수형으로 변환합니다.(ToInt())
-> 그럼 1 또는 2가 나오게 되겠지요?
-> 3 - (위의값)을 하게 되면 RadioGroup1에서 클릭한 경우에는 idx 가 2가 되고
-> RadioGroup2에서 클릭한 경우에는 idx 가 1이 됩니다.

if(RadioGroup1->ItemIndex == RadioGroup2->ItemIndex)
{
    tmp = (TRadioGroup*)FindComponent(String("RadioGroup") + IntToStr(idx));
    tmp->ItemIndex = -1;
}

-> FindComponent는 인자로 해당 객체의 이름을 주면 그 객체의 포인터를 반환하는 함수입니다.
-> 말 그대로 이름을 이용하여 객체를 찾아주는 함수죠.
-> 즉...RadioGroup1에서 호출한 경우에는 RadioGroup2를 반환하도록 하는 거죠
-> 다음으로 ItemIndex를 -1로 주면 아무것도 선택되지 않도록 합니다.

+ -

관련 글 리스트
22735 [질문]RadioGroup 에서요 권혁준 1388 2002/11/20
22737     Re:[질문]RadioGroup 에서요 Julien 1046 2002/11/20
22756         늦었지만 코드에 대한 간단한 설명입니다. Julien 946 2002/11/21
22742         Re:Re:[자답]RadioGroup 에서요 권혁준 915 2002/11/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.