anchor.diff:    inherited HandleMouseMove(x, y, btnstate, shiftstate);
     Position := FindPoint(X, Y, Line, Offset, Link);
   
  -//  if not MouseCapture then     // TODO: Introduce a IsMouseCaptured in TfpgWindow
  -  begin
  -    if Link <> FLastLinkOver then
  +  if Link <> FLastLinkOver then
  +  begin
  +    if Link <> '' then
       begin
  -      if Link <> '' then
  -      begin
  -        if Assigned(FOnOverLink) then
  -          FOnOverLink(Self, Link)
  -      end
  -      else
  -      begin
  -        if Assigned(FOnNotOverLink) then
  -          FOnNotOverLink(Self, FLastLinkOver);
  -      end;
  -      FLastLinkOver := Link;
  +      if Assigned(FOnOverLink) then
  +        FOnOverLink(Self, Link)
  +    end
  +    else
  +    begin
  +      if Assigned(FOnNotOverLink) then
  +        FOnNotOverLink(Self, FLastLinkOver);
       end;
  -
  -    if Link <> '' then
  -      MouseCursor := mcHand
  -    else
  -      MouseCursor := mcDefault;   // TODO: later this should be IBeam when RichView supports editing
  -    exit;
  -  end;
  +    FLastLinkOver := Link;
  +  end;
  +
  +  if Link <> '' then
  +    MouseCursor := mcHand
  +  else
  +    MouseCursor := mcDefault;   // TODO: later this should be IBeam when RichView supports editing
   end;
   
   Destructor TRichTextView.Destroy;
  
positive.code:   end;
  end;
  
  procedure TRichTextView.MakeRowAndColumnVisible( Row: longint;
                                                   Column: longint );
  var
    X: Longint;
  begin
    MakeRowVisible( Row );
    FLayout.GetXFromOffset( Column, Row, X );
  
    if X > FXScroll + GetTextAreaWidth then
      // off the right
      SetHorizontalPosition( X - GetTextAreaWidth + 5 )
    else if X < FXScroll then
      // off to left
      SetHorizontalPosition( X );
  
  end;
  
  function TRichTextView.LinkFromIndex( const CharIndexToFind: longint): string;
  
negative.code:   Shift: boolean;
  begin
    inherited HandleLMouseDown(x, y, shiftstate);
    Offset := 0;
    Position := FindPoint( X, Y, Line, Offset, Link );
    FClickedLink := Link;
  //  writeln('Pos=', Ord(Position), '  link=', Link);
  
    if Position in [tpAboveTextArea, tpBelowTextArea] then
      // not on the control (this probably won't happen)
      exit;
  
    // if shift is pressed then keep the same selection start.
    Shift := ssShift in ShiftState;
    RemoveCursor;
  
    if not Shift then
      ClearSelection;
  
    SetCursorPosition(Offset, Line, Shift);
  end;
  
  procedure TRichTextView.HandleLMouseUp(x, y: integer; shiftstate: TShiftState);
  