anchor.diff:      if FSelectedItemIndex < ScrollPosition then
         ScrollPosition := FSelectedItemIndex
       else
  -      while FItemRects[FSelectedItemIndex].Top + FItemOffsets[FSelectedItemIndex] < 0 do
  +      while (FItemRects[FSelectedItemIndex].Top + FItemOffsets[FSelectedItemIndex] < 0) or
  +        (FItemRects[FSelectedItemIndex].Bottom + FItemOffsets[FSelectedItemIndex] > ScrollRects[1].Top) do
         begin
           Inc(ScrollPosition);
           RecalculateScrollPositions;
  
positive.code:   if not Assigned(Fmnu) or not Assigned(Fmnu.Items) then Exit;  // I2884
  
    case Key of
      {VK_NEXT:
        begin
          Key := 0;
          if ScrollableView and (ScrollPosition < MaxScrollPosition) then
            Inc(ScrollPosition);
        end;
      VK_PRIOR:
        begin
          Key := 0;
          if ScrollableView and (ScrollPosition > 0) then
            Dec(ScrollPosition);
        end;}
      VK_UP:
        begin
          Key := 0;
  
negative.code:           MaxKeyboardWidth := ItemWidth;
  
          Inc(TotalKeyboardHeight, ItemHeight);
        end
        else
        begin
  