anchor.diff:    CalcSplitSize(X, Y, FNewSize, FSplit);
   end;
   
  +procedure TfpgSplitter.DoOnSnap(const AClosed: Boolean);
  +begin
  +  if Assigned(FOnSnap) then
  +    FOnSnap(self, AClosed);
  +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
  +  begin
       NewSize := 0;
  +    DoOnSnap(NewSize = 0);
  +  end;
   end;
   
   procedure TfpgSplitter.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
  
positive.code:     FOldSize: Integer;
      FSplit: Integer;
      FMouseOver: Boolean;
      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
      function    DoCanResize(var NewSize: Integer): Boolean; virtual;
      procedure   HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
      procedure   HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
  
negative.code:     constructor Create(AOwner: TComponent); override;
      destructor  Destroy; override;
    published
      property    AutoSnap: boolean read FAutoSnap write FAutoSnap default True;
      property    ColorGrabBar: TfpgColor read FColorGrabBar write SetColorGrabBar default clColorGrabBar;
      property    OnSnap: TfpgSnapEvent read FOnSnap write FOnSnap;
    end;
  
  function CreateSplitter(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord;
  