anchor.diff:    
     if IsDblClick then
     begin
  +    if Assigned(FOnTabDblClick) and (FTabIndexOver>=0) then
  +      FOnTabDblClick(Self, FTabIndexOver);
  +
       if FOptMouseDoubleClickClose and (FTabIndexOver>=0) then
         DeleteTab(FTabIndexOver, true, true)
       else
  
positive.code:   TATTabDrawEvent = procedure (Sender: TObject;
      AElemType: TATTabElemType; ATabIndex: integer;
      ACanvas: TCanvas; const ARect: TRect; var ACanDraw: boolean) of object;
    TATTabMoveEvent = procedure (Sender: TObject; NFrom, NTo: integer) of object;  
    TATTabChangeQueryEvent = procedure (Sender: TObject; ANewTabIndex: integer;
      var ACanChange: boolean) of object;
    TATTabClickUserButton = procedure (Sender: TObject; AIndex: integer) of object;
    TATTabGetTickEvent = function (Sender: TObject; ATabObject: TObject): Int64 of object;
    TATTabGetCloseActionEvent = procedure (Sender: TObject; var AAction: TATTabActionOnClose) of object;
  
  type
    TATTabTriangle = (
  
negative.code: procedure TATTabs.DoTabDrop;
  var
    NFrom, NTo: integer;
    ACanDrop: boolean;
  begin
    NFrom:= FTabIndex;
    if not IsIndexOk(NFrom) then Exit;
    NTo:= FTabIndexDrop;
    if not IsIndexOk(NTo) then
      NTo:= TabCount-1;
    if NFrom=NTo then Exit;
  
    ACanDrop:= true;
    if Assigned(FOnTabDropQuery) then
      FOnTabDropQuery(Self, NFrom, NTo, ACanDrop);
    if not ACanDrop then Exit;
  
    FTabList.Items[NFrom].Index:= NTo;
    SetTabIndex(NTo);
  