anchor.diff:  
     NaturalNumber = 1..High(Integer);
   
  +  TfpgSnapEvent = procedure(Sender: TObject; const AClosed: boolean) of object;
   
     TfpgSplitter = class(TfpgWidget)
     private
  
positive.code:   CalcSplitSize(X, Y, FNewSize, FSplit);
  end;
  
  function TfpgSplitter.DoCanResize(var NewSize: Integer): Boolean;
  begin
    // Result := CanResize(NewSize); // omit onCanResize call
    Result := True;
    if Result and (NewSize <= FMinSize) and FAutoSnap then
      NewSize := 0;
  end;
  
  procedure TfpgSplitter.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
  
negative.code:     FOldSize: Integer;
      FSplit: Integer;
      FMouseOver: Boolean;
      FOnSnap: TfpgSnapEvent;
      procedure   CalcSplitSize(X, Y: Integer; out NewSize, Split: Integer);
      function    FindControl: TfpgWidget;
      procedure   SetColorGrabBar(const AValue: TfpgColor);
      procedure   UpdateControlSize;
      procedure   UpdateSize(const X, Y: Integer);
    protected
      procedure   DoOnSnap(const AClosed: Boolean);
      function    DoCanResize(var NewSize: Integer): Boolean; virtual;
      procedure   HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
      procedure   HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
  