제가 프로젝트에 참가하고 있는데
델파이 5.0으로 개발하고 있습니다.
그런데 그리드를 realgrid를 사용하고 dbgridEH를 사용하였는데
마우스에서 스크롤이 화면에 보여지는 만큼만 작동하고 그다음으로 넘어
가지가 않습니다. 어떤것이 문제인지 잘 몰라서 이렇게 글을 올립니다.
많은 지도 부탁드립니다.
아참 db는 오라클 9i를 사용하고 있습니다.
마우스 휠로 스크롤할때 생기는 문제 말씀인가요?
만약 그것 때문이라면, 문제는 TCustomGrid에서 휠부분의 처리가 현재
화면에서만 이뤄지게 되어 있는것을 DBGRID에서 Override 하지 않고
그냥 그대로 처리해서 생기는 문제 입니다.
RealGrid는 사용해 보지는 않았지만 거기서도 그런문제가 있다면,
아마도 동일한 이유 때문일것입니다.
해결하는 방법은 dbgridEH 가 뭔가를 상속 받아서 그중에 Wheel 관련되는
아래의 두개의 메소드를 Override 해 주면 됩니다.
protected
function DoMouseWheelDown(Shift: TShiftState;
MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState;
MousePos: TPoint): Boolean; override;
위의 두개의 메소드의 내용은 아래와 같이 해 주세요.
if Assigned(DataLink.DataSet) and DataLink.DataSet.Active then
DataLink.DataSet.MoveBy(1); <--- 1 또는 -1 (움직이는 방향)
Invalidate;
Result := True ;
마우스 휠로 스크롤할때 생기는 문제 말씀인가요?
만약 그것 때문이라면, 문제는 TCustomGrid에서 휠부분의 처리가 현재
화면에서만 이뤄지게 되어 있는것을 DBGRID에서 Override 하지 않고
그냥 그대로 처리해서 생기는 문제 입니다.
RealGrid는 사용해 보지는 않았지만 거기서도 그런문제가 있다면,
아마도 동일한 이유 때문일것입니다.
해결하는 방법은 dbgridEH 가 뭔가를 상속 받아서 그중에 Wheel 관련되는
아래의 두개의 메소드를 Override 해 주면 됩니다.
protected
function DoMouseWheelDown(Shift: TShiftState;
MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState;
MousePos: TPoint): Boolean; override;
위의 두개의 메소드의 내용은 아래와 같이 해 주세요.
if Assigned(DataLink.DataSet) and DataLink.DataSet.Active then
DataLink.DataSet.MoveBy(1); <--- 1 또는 -1 (움직이는 방향)
Invalidate;
Result := True ;
이렇게 주면 됩니다.