anchor.diff:  end;
   
   
  -function TKMEdit.GetSelectedText: UnicodeString;
  -begin
  -  Result := '';
  -  if HasSelection then
  -    Result := Copy(fText, fSelectionStart+1, fSelectionEnd - fSelectionStart);
  -end;
  -
  -
  -function TKMEdit.HasSelection: Boolean;
  -begin
  -  Result := (fSelectionStart <> -1) and (fSelectionEnd <> -1) and (fSelectionStart <> fSelectionEnd);
  -end;
  -
  -
  -procedure TKMEdit.ResetSelection;
  -begin
  -  fSelectionStart := -1;
  -  fSelectionEnd := -1;
  -  fSelectionInitialCursorPos := -1;
  -end;
  -
  -
  -function TKMEdit.GetCursorPosAt(X: Integer): Integer;
  -var RText: UnicodeString;
  -begin
  -  RText := Copy(fText, fLeftIndex+1, Length(fText) - fLeftIndex);
  -  if gRes.Fonts[fFont].GetTextSize(RText).X < X-AbsLeft-4 then
  -    Result := Length(RText) + fLeftIndex
  -  else
  -    Result := gRes.Fonts[fFont].CharsThatFit(RText, X-AbsLeft-4) + fLeftIndex;
  -end;
  -
  -
  -procedure TKMEdit.MouseDown(X,Y: Integer; Shift: TShiftState; Button: TMouseButton);
  +procedure TKMSelectableEdit.MouseDown(X, Y: Integer; Shift: TShiftState; Button: TMouseButton);
   begin
     if ReadOnly then Exit;
     inherited;
  
positive.code: end;
  
  
  function TKMEdit.KeyUp(Key: Word; Shift: TShiftState): Boolean;
  begin
    Result := KeyEventHandled(Key, Shift);
    if inherited KeyUp(Key, Shift) or ReadOnly then Exit;
  
negative.code: 
  
  end.
  
  