anchor.diff:      Result.Selections[i].Top:=Result.Selections[i].Top-1; // - fixed row
       Result.Selections[i].Bottom:=Result.Selections[i].Bottom-1; // - fixed row
     end;
  +  Result.Page := PageIndex;
   end;
   
   function TCustomVisualGrid.GetSelectedRows : TArray<Variant>;
  
positive.code: 
    FDeselectionType:=AValue;
  
    ResetLastSelection;
    UpdateSelection(SelectionType);
  end;
  
  procedure TCustomVisualGrid.ClearSelection(AIgnoreDeselectionType: boolean);
  begin
    if (FDeselectionType <> dtNone) or AIgnoreDeselectionType then
    begin
      ResetLastSelection;
      UpdateSelection(stNone);
    end;
  end;
  
  
negative.code:         else
          if (FCurrentSelectionType <> stNone) and SelectionsEquals(LSelection, FLastSelection) then
          begin
            ResetSelection(FLastSelection);
            UpdateSelection(stNone, true)
          end
          else begin
            // lock for select event, otherwise we get false information about selection
            // (highly visible problem for deselection option)
            FIgnoreSelectionEvent := true;
            UpdateSelection(FSelectionType, true);
            FIgnoreSelectionEvent := false;
            FLastSelection := LSelection;
            GridSelection(nil, 0, 0);
  