anchor.diff:    Y: Integer;
     X: Integer;
     CaretScroll: Boolean;
  +  HasChanged: boolean;
   begin
     {$IFDEF gDEBUG}
     writeln('>> TfpgBaseTextEdit.HandleKeyPress');
     {$ENDIF}
   //  inherited HandleKeyPress(keycode, shiftstate, consumed);
  +  case CheckClipboardKey(keycode, shiftstate) of
  +    ckCopy:
  +      begin
  +//        DoCopy;
  +      end;
  +
  +    ckPaste:
  +      begin
  +//        DoPaste(fpgClipboard.Text);
  +//        if not ReadOnly then
  +//          HasChanged := True;
  +      end;
  +
  +    ckCut:
  +      begin
  +//        DoCopy;
  +//        DeleteSection;
  +      end;
  +  end;
   
     { Add lines as we go, so we can cursor past EOF. }
     { todo: This behaviour should be optional }
  
positive.code: implementation
  
  uses
    fpg_dialogs{, fpg_constants}, fpg_stringutils, fpg_utils, math;
  
  
  function GetNextWord(SLine: TfpgString; var PosX: Integer): Boolean;
  
negative.code: 
      keyTab:
          begin
            AddS := '  ';
            SendDebug('b: ' + SLine);
            UTF8Insert(AddS, SLine, CaretPos.X);
            SendDebug('a: ' + SLine);
            FLines[CaretPos.Y] := SLine;
            CaretPos.X := CaretPos.X + 2;
            FSelStartNo := CaretPos.Y;
            FSelStartOffs := CaretPos.X;
            consumed := True;
          end;
  
      keyReturn:
  