감사합니다
하루 하루 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을 사용 중입니다.