anchor.diff:  begin Result := Inherited Write(Value, SizeOf(Value)); end;
   
   
  +procedure TKMemoryStream.Read(var Value:string);
  +var i:word;
  +begin
  +  Read(i, SizeOf(i));
  +  setlength(Value, i);
  +  Read(Value[1], i);
  +end;
  +
   function TKMemoryStream.Read(var Value:TKMPoint): Longint;
   begin Result := Inherited Read(Value, SizeOf(Value)); end;
   function TKMemoryStream.Read(var Value:single): Longint;
  
positive.code: type
    TKMemoryStream = class(TMemoryStream)
    public
      function Write(const Value:TKMPoint): Longint; reintroduce; overload;
      function Write(const Value:single): Longint; reintroduce; overload;
      function Write(const Value:integer): Longint; reintroduce; overload;
      function Write(const Value:byte): Longint; reintroduce; overload;
      function Write(const Value:boolean): Longint; reintroduce; overload;
      function Read(var Value:TKMPoint): Longint; reintroduce; overload;
      function Read(var Value:single): Longint; reintroduce; overload;
      function Read(var Value:integer): Longint; reintroduce; overload;
  
negative.code:     msgLoc:TKMPoint;
    end;
  
  type TKMMessageList = class(TObject)
    public
      Count:integer;
      List:array of TKMMessage; //1..Count
      destructor Destroy; override;
      procedure AddEntry(aMsgTyp:TKMMessageType; aText:string; aLoc:TKMPoint);
      procedure RemoveEntry(aID:integer);
      procedure InjectEntry(aID:integer; aMsgTyp:TKMMessageType; aText:string);
  