aa 님이 쓰신 글 :
: 멋지십니다 ^^
:
:
: 지나다가 님이 쓰신 글 :
: : 윈도프로지셔의 체인, 버추얼 메소드 테이블의 패치 없이 간단하게 처리하려면
: : 다음과 같이 TTrackBar의 OnChange 이벤트 핸들러를 이용하면 됨.
: :
: :
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::TrackBar1Change(TObject *Sender)
: : {
: : if( GetAsyncKeyState( VK_LBUTTON ) & 0x8000 )
: : {
: : POINT cp;
: : TTrackBar & tb = static_cast(*Sender);
: :
: : ::GetCursorPos( &cp );
: : ::ScreenToClient( tb.Handle, &cp );
: : int pos = ((float)cp.x / tb.Width) * (tb.Max - tb.Min + 1);
: : ::SendMessage(tb.Handle, TBM_SETPOS, 1, pos);
: : }
: : }
: :
: :
: :
: :
: :
: :
: :
: : 장성호 님이 쓰신 글 :
: : : 완벽한것은 아니지만 대충 다음과 같이하면
: : : 님께서 원하시는것이 아닐까 생각됩니다.
: : :
: : : VCL-Control은 WindowProc를 다음과 같이 쉽게 바꿀수 있습니다.
: : :
: : :
: : :
: : : // Header에 다음과 같이 TWndMethod를 선언하시구요
: : : class TForm8 : public TForm
: : : {
: : : __published: // IDE-managed Components
: : : TTrackBar *TrackBar1;
: : : TLabel *Label1;
: : : void __fastcall TrackBar1Change(TObject *Sender);
: : : void __fastcall FormCreate(TObject *Sender);
: : : private: // User declarations
: : : public: // User declarations
: : : __fastcall TForm8(TComponent* Owner);
: : :
: : : public:
: : : //Oritinal WindowProc저장할 변수 선언
: : : TWndMethod OrgTrackBarProc;
: : :
: : : //교체할 WindowProc메소드 선언
: : : void __fastcall TrackBarWndProc(TMessage &Msg);
: : : };
: : :
: : :
: : :
: : : 그리고 아래와 같이 코딩해 보세요
: : :
: : :
: : :
: : : //TrackBar의 WindowProc교체
: : : void __fastcall TForm8::FormCreate(TObject *Sender)
: : : {
: : : OrgTrackBarProc=TrackBar1->WindowProc;
: : : TrackBar1->WindowProc=TrackBarWndProc;
: : : }
: : :
: : : //---------------------------------------------------------------------------
: : : //교체된WindowProc에서 LBUTTONDOWN(마우스 왼쪽 버튼 down)에 TrackBar의 Position조작
: : : void __fastcall TForm8::TrackBarWndProc(TMessage &Msg)
: : : {
: : : if(Msg.Msg==WM_LBUTTONDOWN)
: : : {
: : : TPoint ptTrPos=TrackBar1->ScreenToClient(Mouse->CursorPos);
: : : int iPos=TrackBar1->Min+(ptTrPos.x*(TrackBar1->Max-TrackBar1->Min))/TrackBar1->ClientWidth;
: : : if(iPos!=TrackBar1->Position)
: : : {
: : : TrackBar1->Position=iPos;
: : : return;
: : : }
: : : }
: : : // 원래 Oritinal WindowProc호출해줌
: : : OrgTrackBarProc(Msg);
: : : }
: : : //---------------------------------------------------------------------------
: : : //화면 표시
: : : void __fastcall TForm8::TrackBar1Change(TObject *Sender)
: : : {
: : : Label1->Caption=TrackBar1->Position;
: : : }
: : :
: : :
: : :
: : :
: : : 그럼..
: : :
: : : 압9정 님이 쓰신 글 :
: : : : 안녕하세요. TrackBar를 사용하여 동영상 플레이어를 만들고 있습니다.
: : : :
: : : : 현재 TrackBar->Min 이 0이고, TrackBar->Max 가 10 이고, TrackBar->Position 이 0 이고, TrackBar->PageSize = 1 일 때,
: : : :
: : : : 마우스로 3번째 위치를 눌르게 되면 TrackBar->Position 이 3이 되는 것이 아니라 TrackBar->PageSize 만큼 이동하여
: : : :
: : : : TrackBar->Position이 1이 됩니다.
: : : :
: : : : 이 때, 3번째 위치를 마우스로 눌렀을 때, TrackBar->Position이 3이 되도록 할 수 는 없나요?
: : : :
: : : : (그림을 보면 이해가 편하실 겁니다.)