어플리케이션 이벤트로 처리했습니다
다음에는 이런식으로 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할때만 이벤트 하는 방법 없나요??
: : ㅜㅜ