anchor.diff:      function GetIndexOfButton(AData: TATTabButtons; ABtn: TATTabButton): integer;
       function GetInitialVerticalIndent: integer;
       function IsScrollMarkNeeded: boolean;
  +    function GetMaxEdgePos: integer;
       function GetMaxScrollPos: integer;
       function GetRectOfButton(AButton: TATTabButton): TRect;
       function GetRectOfButtonIndex(AIndex: integer; AtLeft: boolean): TRect;
       function GetScrollPageSize: integer;
  +    function IsTabVisible(AIndex: integer): boolean;
       procedure SetOptButtonLayout(const AValue: string);
  +    procedure SetOptVarWidth(AValue: boolean);
       procedure SetTabIndex(AIndex: integer);
       procedure GetTabCloseColor(AIndex: integer; const ARect: TRect; var AColorXBg,
         AColorXBorder, AColorXMark: TColor);
  
positive.code:   else
      Result:= Rect(0, 0, 10, 10);
  
    case FOptPosition of
      atpTop,
      atpBottom:
  
negative.code:   end;
  end;
  
  function TATTabs.IsTabVisible(AIndex: integer): boolean;
  var
    D: TATTabData;
    R: TRect;
  begin
    if not IsScrollMarkNeeded then exit(true);
  
    D:= GetTabData(AIndex);
    if D=nil then exit(false);
    R:= D.TabRect;
  
    case FOptPosition of
      atpTop,
      atpBottom:
        Result:=
          (R.Left-FScrollPos >= FRealIndentLeft) and
          (R.Right-FScrollPos < ClientWidth-FRealIndentRight);
      else
        Result:=
          (R.Top-FScrollPos >= FRealIndentLeft) and
          (R.Bottom-FScrollPos < ClientHeight-FRealIndentRight);
    end;
  end;
  
  procedure TATTabs.MakeVisible(AIndex: integer);
  var
    D: TATTabData;
    R: TRect;
  begin
    //sometimes new tab has not updated Data.TabRect
    DoUpdateTabRects(FBitmap.Canvas);
  
    if not IsScrollMarkNeeded then exit;
  
    if IsTabVisible(AIndex) then exit;
  
    D:= GetTabData(AIndex);
    if D=nil then exit;
  