anchor.diff:      _mk := id;
       if assigned(fMarkChanged) then fMarkChanged(self);
     end;
  +
   procedure TDbCursor.ToMark;
     begin
       _rs.locate(keyField, _mk, [])
     end;
  +
   procedure TDbCursor.ToTop;
     begin
       ToMark; _rs.First; SetMark(_rs[keyField]);
     end;
  +
   procedure TDbCursor.ToEnd;
     begin
       ToMark; _rs.Last; SetMark(_rs[keyField]);
     end;
  +
  +function TDbCursor.AtTop : boolean;
  +  begin
  +    ToMark; result := _rs.BOF;
  +  end;
  +
  +function TDbCursor.AtEnd : boolean;
  +  begin
  +    ToMark; result := _rs.EOF;
  +  end;
  +
   function TDBCursor.RowIsVisible : boolean;
     begin
  -    result := CanHideRows and (_rs[hideFlag]=0)
  -  end;
  +    result := (not CanHideRows) or (_rs[hideFlag]=0)
  +  end;
  +
   procedure TDbCursor.Next;
     begin
       ToMark;
       repeat _rs.Next until _rs.EOF or RowIsVisible;
       if RowIsVisible then SetMark(_rs[keyField]);
     end;
  +
   procedure TDbCursor.Prev;
     begin
       ToMark;
       repeat _rs.Prior until _rs.BOF or RowIsVisible;
       if RowIsVisible then SetMark(_rs[keyField]);
     end;
  +
   function TDbCursor.AtMark : boolean;
     begin
       result := _rs[keyField] = _mk;
     end;
  +
   procedure TDbCursor.Toggle;
     var olid, nid : integer; sql : string;
     begin
  
positive.code:       procedure ToMark;
        procedure Toggle;
        procedure SetMark(id : integer);
     published
        property OnMarkChanged : TNotifyEvent read fMarkChanged write fMarkChanged;
        property RecordSet : TRecordSet read _rs write _rs;
  
negative.code:     count : cardinal =  0;
      rs    : TRecordSet;
  begin
    bg('b'); fg('W');
  
    rs := _cur.RecordSet;
    rs.open;
    rs.first;
    while not rs.eof do
      begin
  