就是说,拖动滚动条,数据在跟着滚动条动,而游标不会跟着移动,始终在所选择的那条数据上.

解决方案 »

  1.   

    用内存表控件,Ehlib里面有。
      

  2.   

    继承DBGridEh组件, 写一个DBGridEhEx组件
    然后定义如下函数
    private 
      procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;procedure DBGridEhEx.WMVScroll(var Message: TWMVScroll);
    var
      SI: SCROLLINFO;
    begin
      if (csDesigning in ComponentState) or not AcquireFocus then Exit;
      if not DataLink.Active then Exit;  with Message, DataLink.DataSet do
          case ScrollCode of
            SB_LINEUP: ;//Prior;
            SB_LINEDOWN: ;//Next;
            SB_PAGEUP: ;//MoveBy( -VisibleDataRowCount );
            SB_PAGEDOWN: ;//MoveBy( VisibleDataRowCount );
            SB_THUMBTRACK:
              begin
              if Pos >0 then DataLink.DataSet.RecNo :=Integer( Message.Pos)
              else begin
                SI.cbSize := sizeof(SI);
                SI.fMask := SIF_TRACKPOS;
                Windows.GetScrollInfo(Handle, SB_VERT, SI);
                //DataLink.DataSet.RecNo := SI.nTrackPos;
              end;
              end;
            SB_THUMBPOSITION {,SB_THUMBTRACK}:begin
                  case Pos of
                    0: //First;
                    1: //MoveBy( -VisibleDataRowCount );
                    2: Exit;
                    3: //MoveBy( VisibleDataRowCount );
                    4: //Last
                  end; //end;
            SB_BOTTOM: //Last;
            SB_TOP: //First;
          end;
    end;注意: 所有会移支数据集当前游标位置的, 都已经打上注释, 这样就应该可以实现你想要的效果, 但是不知道是否表格内部有没有限制显示范围是跟当前行有关的
    离开当前行一定距离就不能移动之类