anchor.diff:                end;
               end;
               FSelected := (FSelStartNo <> FSelEndNo) or (FSelStartOffs <> FSelEndOffs);
  -            //DrawVisible;
               Exit;
             end;
             if FSelected then
             begin
               FSelected := False;
  -            //DrawVisible;
  -            //DrawCaret(CaretPos.X, CaretPos.Y, True);
             end;
             if ssCtrl in ShiftState then
             begin
               CtrlKeyLeftKey;
  -            //DrawVisible;
  -            //DrawCaret(CaretPos.X, CaretPos.Y, True);
             end;
             FSelStartNo := CaretPos.Y;
             FSelStartOffs := CaretPos.X;
  
positive.code:             begin
                if CaretPos.Y <= pred(FLines.Count) then
                begin
                writeln('********');
                  //GliphY := (CaretPos.Y - FTopLine) * FChrH;
                  //DrawLine(Canvas, CaretPos.Y, GliphY);
                  //DrawCaret(CaretPos.X, CaretPos.Y + 1, False);
                  if (ssCtrl in ShiftState) and (CaretPos.Y > 0) then
                  begin
                    CaretPos.Y := CaretPos.Y - 1;
  
negative.code:                   begin
                      FSelEndNo := CaretPos.Y;
                      FSelEndOffs := CaretPos.X;
                    end;
                    Exit;
                  end;
                end;
                CaretPos.Y := CaretPos.Y - 1;
                CaretPos.X := Length(FLines[CaretPos.Y]);
              end
              else
              begin
                CaretPos.X := 0;
              end;
            end;
            if ssShift in ShiftState then
            begin
              if not FSelected then
  