anchor.diff:      result := h^.width
     else // not found -> returns the default
       result := DefaultColumnWidth;
  +end;
  +
  +procedure TfpgTreeView.GotoNextNodeUp;
  +begin
  +  if Selection = RootNode.FirstSubNode then
  +    Exit;
  +  Selection := PrevNode(Selection);
  +end;
  +
  +procedure TfpgTreeView.GotoNextNodeDown;
  +begin
  +  if Selection = RootNode.LastSubNode then
  +    Exit;
  +  Selection := NextNode(Selection);
   end;
   
   procedure TfpgTreeview.PreCalcColumnLeft;
  
positive.code:   end;
  end;
  
  function TfpgTreeview.SpaceToVisibleNext(aNode: TfpgTreeNode): integer;
  var
    h: TfpgTreeNode;
  
negative.code:     procedure   DrawHeader(ACol: integer; ARect: TfpgRect; AFlags: integer); virtual;
      procedure   DoChange; virtual;
      procedure   DoExpand(ANode: TfpgTreeNode); virtual;
      // only visual (visible) nodes
      function    NextVisualNode(ANode: TfpgTreeNode): TfpgTreeNode;
      function    PrevVisualNode(ANode: TfpgTreeNode): TfpgTreeNode;
      // any next node, even if node is collapsed
      function    NextNode(ANode: TfpgTreeNode): TfpgTreeNode;
      function    PrevNode(ANode: TfpgTreeNode): TfpgTreeNode;
      // the nodes between the given node and the direct next node
      function    SpaceToVisibleNext(aNode: TfpgTreeNode): integer;
      function    StepToRoot(aNode: TfpgTreeNode): integer;
  