anchor.diff:  
     NewPos := Position;
     if (ssLeft in Shift) then begin //todo: How to make it act more like WinControl, which has active area around it and regains csOver when cursor goes away and returns
  +
       if fScrollAxis = sa_Vertical then
         if InRange(Y,Top+Width,Top+Height-Width) then
           NewPos := round( MinValue+((Y-Top-Width-Thumb/2)/(Height-Width*2-Thumb))*(MaxValue-MinValue) );
  +
       if fScrollAxis = sa_Horizontal then
         if InRange(X,Left+Height,Left+Width-Height) then
           NewPos := round( MinValue+((X-Left-Height-Thumb/2)/(Width-Height*2-Thumb))*(MaxValue-MinValue) );
  -  end;
  -  if NewPos <> Position then begin
  -    Position := EnsureRange(NewPos, MinValue, MaxValue);
  -    if Assigned(OnChange) then
  -      OnChange(Self);
  -  end;
  -
  +
  +    if NewPos <> Position then begin
  +      Position := EnsureRange(NewPos, MinValue, MaxValue);
  +      if Assigned(OnChange) then
  +        OnChange(Self);
  +    end;
  +
  +  end;
   end;
   
   
  
positive.code: end;
  
  
  procedure TKMFileList.MouseMove(X,Y:integer; Shift:TShiftState);
  begin
    Inherited;
  
    if (ssLeft in Shift) and
       (InRange(X, Left, Left+Width-ScrollBar.Width)) and
       (InRange(Y, Top, Top+Height div ItemHeight * ItemHeight))
    then
      ItemIndex := TopIndex + (Y-Top) div ItemHeight;
  
    if ItemIndex > fFiles.Count-1 then ItemIndex := -1;
  
    if Assigned(OnChange) and (ssLeft in Shift) then
      OnChange(Self);
  end;
  
  
  
negative.code: end;
  
  
  procedure TKMScrollBar.MouseDown(X,Y:integer; Shift:TShiftState; Button:TMouseButton);
  begin
    Inherited;
    MouseMove(X,Y,Shift); //Will change Position and call OnChange event
  end;
  
  
  procedure TKMScrollBar.MouseMove(X,Y:integer; Shift:TShiftState);
  var NewPos: integer;
  begin
  