anchor.diff:      FVisCols := GetClientRect.Width div FChrW;
   end;
   
  +{ Re-order StartXXX and EndXXX if user is selecting backwards }
   procedure TfpgBaseTextEdit.GetSelBounds(var AStartNo, AEndNo, AStartOffs,
     AEndOffs: Integer);
   begin
  
positive.code:           begin
              if not FSelected then
              begin
                if CaretPos.Y <= pred(FLines.Count) then
                  if CaretPos.X > Length(FLines[CaretPos.Y]) then
                    CaretPos.Y := Length(FLines[CaretPos.Y]) - 1;
                FSelected := True;
                FSelStartNo := CaretPos.Y;
                FSelStartOffs := CaretPos.X + 1;
  
negative.code:           begin
              if CaretPos.Y > 0 then
              begin
                if CaretPos.Y <= (FLines.Count-1) then
                begin
                  if (ssCtrl in ShiftState) and (CaretPos.Y > 0) then
                  begin
                    CaretPos.Y := CaretPos.Y - 1;
                    CaretPos.X := UTF8Length(FLines[CaretPos.Y]);
                    if FSelected then
                    begin
                      FSelEndNo := CaretPos.Y;
  