|
영학 님이 쓰신 글 :
: DBGrid에서 마우스 휠을 제대로 사용하는 방법을 알고 싶습니다.
: 아주 복잡한 방법이라도 상관없으니 혹시 사용하는 방법을 아시는 분은
: 답변좀 주세여...
:
: 그러니깐 목적은 다른 프로그램처럼 마우스 휠을 움직이면
: 선택된 파란색의 위치는 변하지 않고 옆에 생긴 스크롤바만 움직이면 됩니다.
:
: 현재는 선택된 파란색만 움직이고 선택된 grid도 바뀌지 않고 물런 스크롤바도 움직이지 않습니다.
: 스크롤바도 처음 중간 끝 이렇게 세가지 밖에 안됩니다. 아주 이상하져.. -_-;;;
: 물런 마우스 휠에 대한 소프트 웨어 깔면 쓸만하게 되기는 합니다만... 그런 외부 프로그램의
: 도움없이 자체적으로 스크롤이 되게 하고 싶습니다.
:
: 그럼 혹시나 저와 비슷한 경험이 있거나 방법을 알고 계시는 분 있으면... 답변 부탁드립니다.
:
: 아니면 아예 휠이 안먹게 하는것도 좋습니다. 제대로 안 작동하면 아예 안되는 방법이 좋을것 같기도 하니까요... ? -_-;;;;;;;;;;;;;;;;;;;;;;
:
: 그럼 답변 부탁드립니다.
:
여러방법이 있는것 같은데요..
제가 한방법은 이렇습니다.
우선 default로 dbgrid에 focus가 놓이면 일단은 화면에 보이는 범위안에서는
wheel이 먹습니다. 문제는 화면영역에 벗어나는 data를 보려고 할때 wheel이
먹지를 않는 현상이죠..
이문제는 dbgrid와 연결된 query나 table의 record number를 조정해서 해결합니다.
우선 dbgrid의 message를 얻어와야 하는데 방법은 다 아시겠지만 조금설명하면
우선 header에 TWndMethod OrgWndMethod;라고 선언하시고
구현부분에서 OrgWndMethod = DBGrid1->WindowProc ;
DBGrid1->WindowProc = DBwheel;<-- message를 수행하는 function입니다.
그리고
DBwheel function의 구현부분에서
if(Msg.Msg == WM_MOUSEWHEEL) {
if(Msg.WParamHi == 65416) { //wheel down입니다.
Query1->RecNo = Query1->RecNo+1;
}
else if(Msg.WParamHi == 120) { //wheel up입니다.
if(Query1->RecNo > 0) Query1->RecNo = Query1->RecNo-1 ;
}
return ; //반드시 해야합니다.
}
OrgWndMethod(Msg); //원래 wndproc함수를 부릅니다.
실행하실때 일단은 dbgrid에 focus 를 놓아야합니다.
이렇게 하시면 될것같네요.. 그럼 이만...
참고로 DBwheel(TMessage &Msg) 입니다.
|