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
[66017] Re:Re:CheckBox 질문 있습니다.
쌩조 [whitepd] 861 읽음    2012-01-18 15:30
감사합니다
하루 하루 Q&A에서 많은걸 얻어 가는것 같습니다.
활용하여 잘 사용하겠습니다.
장성호 님이 쓰신 글 :
: 음..
:
: CheckBox이름이
:
: CheckBox1 .... CheckBox8 이라는 가정하에 코딩한것입니다.
:
:
:
:
: //Header
: class TForm1 : public TForm
: {
: __published:	// IDE-managed Components
: 	TCheckBox *CheckBox1;
: 	TCheckBox *CheckBox2;
: 	TCheckBox *CheckBox3;
: 	TCheckBox *CheckBox4;
: 	TCheckBox *CheckBox5;
: 	TCheckBox *CheckBox6;
: 	TCheckBox *CheckBox7;
: 	TCheckBox *CheckBox8;
: 	void __fastcall CheckBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
: 	void __fastcall FormCreate(TObject *Sender);
: private:	// User declarations
: public:		// User declarations
: 	__fastcall TForm1(TComponent* Owner);
: 	TCheckBox *ChkBoxArr[8];
: 	int  __fastcall TForm1::GetCheckBoxCheckedCount();
: };
: 

:
:
: //*.cpp
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
: 	for(int i=1;i<=8;i++)
: 	{
: 		ChkBoxArr[i-1]=(TCheckBox *)FindComponent("CheckBox"+IntToStr(i));
: 	}
: }
: //---------------------------------------------------------------------------
: int  __fastcall TForm1::GetCheckBoxCheckedCount()
: {
: 	int iChkCnt=0;
: 	for(int i=0;i<8;i++)
: 	{
: 		if(ChkBoxArr[i]->Checked)iChkCnt++;
: 	}
: 	return iChkCnt;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::CheckBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
: {
: 	if(Shift.Contains(ssLeft))
: 	{
: 		TCheckBox *ChkBox=(TCheckBox *)Sender;
: 		if(!ChkBox->Checked)
: 		{
: 			if(GetCheckBoxCheckedCount()>=3)
: 			{
: 				ReleaseCapture();
: 			}
: 		}
: 	}
: }
: //---------------------------------------------------------------------------
: 
: 

:
:
: 음..
: ReleaseCapture가 핵심입니다.

: Mouse 이벤트는 (MouseMove , MouseWheel , MouseUp ...)
: Capture된 윈도우(Control)에서만 발생합니다.
:
: Capture는 는 MouseDown이벤트에 Mouse위치의 윈도우(Control)에 캡쳐가 되구요.
: 만약 위코드에서처럼 CheckBox에서 ReleaseCapture를 해버리면
:
: 그 이후 다시 MouseDown이 되기전까지는 해당 Control에서  MouseMove의 MouseUp이 발생하지 않습니다.
:
: CheckBox의 Checked는 MouseUp이 발생하기 직전 Click이 발생하는데
: Click이벤트 발생 전에 Checked가 변경됩니다.
:
: 즉 위와같이 MouseDown이후에ReleaseCapture로
: Mouse이벤트를 받지 않도록 만들어 버리면CheckBox가  Checked가 되지 않을 것입니다.
:
:
: 그럼..
:
: 쌩조 님이 쓰신 글 :
: : CheckBox를 이용해서 그래프의 Series를 표시하고 있습니다.
: :
: : CheckBox가 총 8개가 존재하는데 이중에서 3개가 미리 체크 되어진다면 4개 이상부터는 체크가 되지 않게
: :
: : 할수 있는 방법이 있습니까?
: :
: : 이런 종류의 체크의 갯수를 제한하는 방법을 사용 해보신분들 도움좀 주세요
: :
: : C++Bulider을 사용 중입니다.

+ -

관련 글 리스트
66014 CheckBox 질문 있습니다. 쌩조 960 2012/01/18
66015     Re:CheckBox 질문 있습니다. 장성호 1034 2012/01/18
66017         Re:Re:CheckBox 질문 있습니다. 쌩조 861 2012/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.