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
[54603] Re:TrackBar 에서 마우스 이벤트 처리
장성호 [nasilso] 1441 읽음    2008-09-18 19:32
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 에서 마우스 이벤트 처리 김재범 2109 2008/09/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.