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
[62380] Re:Re:감사합니다~ 처리 했네요~
궁금이 [] 873 읽음    2010-09-09 11:28
어플리케이션 이벤트로 처리했습니다
다음에는 이런식으로 class 를 잡아서 한번 해볼께요
게시판에 와보면 늘 장성호님의 정성스런 답변에 감동하는 초보입니다~

장성호 님이 쓰신 글 :
: 음...
: 님이 말씀하신대로 MouseUp에서만 체크하는 코딩을 하시면 될듯 한데요...
:
: 모든 Window(Window Handle이 있는 Form및 Control)는   마우스 동작에 대해
:
: WM_LBUTTONDOWN , WM_LBUTTONUP , WM_MOUSEMOVE 등의 메세지가 발생합니다.
:
: 위 메세지를 잡아서 VCL에서는 TControl에서 OnMouseDown , OnMouseMove , OnMouseUp 이라는 이벤트로 만들어 뒀구요..
: TControl의 자식중에 하나인 TTrackbar 또한 관련 이벤트가 있습니다.

: 그런데 TTrackbar 컨트롤에는 Mouse 관련 이벤트가 Object-Inspector에서 안보이는데..
: 그 이유는 조상이 가지고 있는 프로퍼티중에 필요없다 싶은것을 감추어버렸기 때문입니다.
:
: 다음과 같이 TTrackBar 클래스를 상속받아
: 교체식으로 새로운 클래스를 정의하여 원하시는 기능을 구현해보세요
:
:
: class TTrackBar: public Comctrls::TTrackBar
: {
:     TNotifyEvent FOnChanged;
:     int iPos;
: public:
:     __fastcall TTrackBar(TComponent *Owner)
:         : Comctrls::TTrackBar(Owner)
:     {
:         this->OnMouseDown=TrackBarMouseDown;
:         this->OnMouseUp=TrackBarMouseUp;
:     }
:     void __fastcall TrackBarMouseDown(TObject *Sender, TMouseButton Button,
:           TShiftState Shift, int X, int Y)
:     {
:         iPos=this->Position;
:     }
:     void __fastcall TrackBarMouseUp(TObject *Sender, TMouseButton Button,
:           TShiftState Shift, int X, int Y)
:     {
:         if(iPos!=this->Position)
:         {
:             if(FOnChanged)FOnChanged(this);
:         }
:     }
: public:
:     __property TNotifyEvent OnChanged={read=FOnChanged,write=FOnChanged};
: };
: 
: #define TTrackBar  ::TTrackBar
: 
: class TForm1 : public TForm
: {
: __published:	// IDE-managed Components
:     TTrackBar *TrackBar1;
:     void __fastcall FormCreate(TObject *Sender);
: private:	// User declarations
: public:		// User declarations
:     __fastcall TForm1(TComponent* Owner);
:     void __fastcall TForm1::TrackBarChanged(TObject *Sender);
: };
: 

:
: Form클래스 앞에 #define으로 class를 재정의 합니다.
:
: 그리고 Form의 cpp에 다음과 같이 코딩해보세요
:
:
:
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
:     TrackBar1->OnChanged=TrackBarChanged;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::TrackBarChanged(TObject *Sender)
: {
:     ShowMessage("TrackBar Changed End");
: }
: 
: 

:
: 위와같이 하시면 Trackbar를 움직여서 Position이 변경되고 Mouse를 Up할때
: TrackBarChanged 함수가 호출될것입니다.
:
: 교체식에 관하여는
: 팁 게시판데 김태선님이 여러가지 올려놓은것이 있습니다.
: 참고하시구요
:
:
: 그럼..
:
: 궁금이 님이 쓰신 글 :
: : 제목 그대로 입니다
: : 볼륨을 조절하는 프로그램을 짜는 중인데요..
: : OnChange 만 있어서
: : 마우스로 볼륨을 조절하면 조절할때마다 이벤트가 발생되네요
: : 마우스로 조절하다가 마우스를 Up할때만 이벤트 하는 방법 없나요??
: : ㅜㅜ

+ -

관련 글 리스트
62373 TrackBar 에서 마우스 Up일 경우만 이벤트 처리 궁금이 927 2010/09/08
62375     Re:TrackBar 에서 마우스 Up일 경우만 이벤트 처리 장성호 1324 2010/09/08
62381         Re:Re:저도 이 이벤트가 필요했었는데.. 좋은 정보 감사합니다!!(내용은 없어요!) 로더 750 2010/09/09
62382             Re:Re:Re:저도 이 이벤트가 필요했었는데.. 좋은 정보 감사합니다!!(내용은 없어요!) Lyn 763 2010/09/09
62380         Re:Re:감사합니다~ 처리 했네요~ 궁금이 873 2010/09/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.