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
[54604] Re:Re:TrackBar 에서 마우스 이벤트 처리
김재범 [lucyfer7] 2108 읽음    2008-09-18 19:44
와 정말 감사합니다.
방법1은 제가 짠 코드와는 좀 달르고 제가 원한 답이 방법2라서 방법2로 해서 문제가 풀렸습니다.
타이머에서  짜준것에 대한게 좀 알쏭달쏭 했는데, 해보니까 이해가 되더군요.
매번 감사합니다.

장성호 님이 쓰신 글 :
: TrackBar의 OnChange 이벥트 핸들러에서
:
: Timer에서 TrackBar Position 변경한것이랑
: 사용자가 마우스로 클릭해서 TrackBar Position변경한것이랑 구분해서
: 사용자가 마우스 클릭으로 TrackBar Position 변경할때만 어떤 동작을 하게 하고 싶다는것이죠?
:
: Timer 코드는 어떻게 된어있는지 모르겠지만
: 간단히 다음과 같은 방법으로 가능합니다.
:
: 방법1. Timer 이벤트 핸들러에서 TrackBar.Position을 수정하기 전후에
:     TrackBar의 OnChange 이벤트 핸들러를 뺐다가 넣어줍니다.
:
:
: void __fastcall TForm1::TrackBar1Change(TObject *Sender)
: {
:     m_pMP->put_CurrentPosition(TrackBar1->Position);
: }
: //---------------------------------------------------------------------------
: 
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
:     TrackBar1->OnChange=NULL;
:     TrackBar1->Position++;
:     TrackBar1->OnChange=TrackBar1Change;
: }
: //---------------------------------------------------------------------------
: 

:
:
: 방법2. 그냥 bool형 변수 하나두고 변수값을
:         Timer 이벤트 핸들러에서  변수값을 true , false로 변경하구요
:          TrackBar의 OnChange이벤트 핸들러에서는 변수값을 보고 처리합니다.
:
: 
: bool bMouseChange=true;
: void __fastcall TForm1::TrackBar1Change(TObject *Sender)
: {
:     if (bMouseChange)
:         m_pMP->put_CurrentPosition(TrackBar1->Position);
: }
: //---------------------------------------------------------------------------
: 
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
:     bMouseChange=false;
:     TrackBar1->Position++;
:     bMouseChange=true;
: }
: //---------------------------------------------------------------------------
: 

:
:
: 님께서 원하는 답변이길 기대합니다.
:
: [추신]
:     TTrackBar 컨트롤 말고 상당히 많은 컨트롤이 (아니 대부분의 컨트롤에서)
:      사용자가 마우스로 어떻게 클릭하거나 제어할때만 이벤트가 발생하는것이 아니라
:      코딩에서 값을 변경해도 이벤트가 발생합니다.
:       (아닌것도 있음)
:
:      VCL로(Delphi나 C빌더) 어플리케이션 만들때 유의해야할점 중에 하나입니다.
:
:      코딩으로 컨트롤의 값을 변경할때 이벤트가 발생하지 않게 하려면
:      대게 위 2가지 방법이 쓰인다고 할수 있겠습니다.
:        
:
: 그럼..
:
: 김재범 님이 쓰신 글 :
: : 영상 플레이어를 만드려고 하는데요
: :
: : 타이머에서 영상의 포지션 값을 trackbar에 넣습니다.
: :
: : trackbar에서 change가 되면 포지션을 영상의 현재 시간에 넣습니다.
: :
: : 일반 영상 플레이어를 연상하면 이해가 쉬우실 거라 생각해서 넘어갈께요.
: :
: : 문제는 타이머에서 트랙바의 포지션을 지정해 주니 트랙바에서는 체인지가 일어나고,
: :
: : 체인지가 일어나서 현재 위치를 영상에 넣고.
: :
: : 이렇게 서로 호출하다보니까 영상이 1초 재생되었다 되돌아갔다가 다시 재생되었다가 뭐 이런식으로 됩니다.
: :
: : 제가 하고 싶은건 트랙바 체인지 이벤트에서 마우스로 트랙바의 포지션을 움직였을때만 트랙바의 체인지를 호출하고 싶습니다.
: :
: : 대충 만들어보면..
: : void __fastcall TForm1::TrackBar1Change(TObject *Sender)
: : {
: :    if(WM_LBUTTONDOWN)  // <-- 여기를 수정...
: :     m_pMP->put_CurrentPosition(TrackBar1->Position);
: : }
: :  이런식으로 하려고 하는데 어떻게 해야 할지..
: : 죄송한데 실력이 안되어서 설명을 해주셔도 그 설명을 다시 찾아봐야 하는 불상사가 일어나는데..
: :
: : 코드로 좀 짜주시면 안 될까요?

+ -

관련 글 리스트
54602 TrackBar 에서 마우스 이벤트 처리 김재범 1513 2008/09/18
54603     Re:TrackBar 에서 마우스 이벤트 처리 장성호 1441 2008/09/18
54604         Re:Re:TrackBar 에서 마우스 이벤트 처리 김재범 2108 2008/09/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.