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
[62375] Re:TrackBar 에서 마우스 Up일 경우만 이벤트 처리
장성호 [nasilso] 1323 읽음    2010-09-08 19:51
음...
님이 말씀하신대로 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일 경우만 이벤트 처리 장성호 1323 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.