완벽한것은 아니지만 대충 다음과 같이하면
님께서 원하시는것이 아닐까 생각됩니다.
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이 되도록 할 수 는 없나요?
:
: (그림을 보면 이해가 편하실 겁니다.)
|