procedure TCustomDBGrid.WMVScroll(var Message: TWMVScroll);
var
SI: TScrollInfo;
begin
if not AcquireFocus then Exit;
if FDatalink.Active then
with Message, FDataLink.DataSet do
case ScrollCode of
SB_LINEUP: FDataLink.MoveBy(-FDatalink.ActiveRecord - 1);
SB_LINEDOWN: FDataLink.MoveBy(FDatalink.RecordCount - FDatalink.ActiveRecord);
SB_PAGEUP: FDataLink.MoveBy(-VisibleRowCount);
SB_PAGEDOWN: FDataLink.MoveBy(VisibleRowCount);
SB_THUMBPOSITION:
begin
if IsSequenced then
begin
SI.cbSize := sizeof(SI);
SI.fMask := SIF_ALL;
GetScrollInfo(Self.Handle, SB_VERT, SI);
if SI.nTrackPos <= 1 then First
else if SI.nTrackPos >= RecordCount then Last
else RecNo := SI.nTrackPos;
end
else
case Pos of
0: First;
1: FDataLink.MoveBy(-VisibleRowCount);
2: Exit;
3: FDataLink.MoveBy(VisibleRowCount);
4: Last;
end;
end;
SB_BOTTOM: Last;
SB_TOP: First;
end;
end;
콤포넌트 자체에 휠마우스에 대한 고려가 안되어 있는 것으로 보입니다..
즉, 위아래로 스크롤 되는 것은 윈도우즈 오에스의 영역이라 가능하지만..
화면을 넘어서서 스크롤이 되려면 FDataLink.MoveBy(-FDatalink.ActiveRecord - 1);
이 실행되어야 하는 것으로 보입니다..
콤포넌트를 수정하여 새로 만들기 전에는 안될 듯..
제가 테스트 해보니..
그리드에서 위아래 이동은 되지만..
데이터 레코드의 커서의 이동이 안되고..
셀랙트 표시의 레코드로 이동 역시 안되더군요..
그리고 그 화면 자체의 이동이 불가능 하므로 스크롤바의 이동조차 안되고요..
Filtered와 같은 프로퍼티와는 전혀 무관할 것이 당연하고요 -.-
조희문 님이 쓰신 글 :
: DBgrid에 연결된 데이타 셋은 쿼리이고요
: 쿼리로 데이타를 축출해서 DBgrid에 보여주는 형식입니다
: 이렇게 데이타를 값을 보여주고 DBgrid에 스크롤 바를 움직이면
: 스크롤 바는 움직이지 않아요 휠에 동작에 ...
: 휠값에 스크롤 바가 움직이지 않는 이유는 무엇이 있을까요??
:
: 다른 답변을 보니 filted값을 false로 해야 스크로 바가 움직인다고
: 하던데 그렇게 했는데도 움직이지 않내요
: 혹시 SQL문에 따라서도 영향을 받는지요!!!
:
: 맨날 질문만 올리고..
: 고맙습니다..
|