I think you are over-complicating this. There's no need to use the PlainText
property at all. Leave it at its default setting of True
. Then, to read/write RTF use LoadFromStream
and SaveToStream
. And to read/write plain text use the Lines.Text
property.
This is about as simple as I can make it:
type
TRTF = class
strict private
class function CreateRichEdit: TRichEdit; static;
public
class function Decode(const AInput: string): string; static;
class function Encode(const AInput: string): string; static;
end;
class function TRTF.CreateRichEdit: TRichEdit;
begin
Result := TRichEdit.CreateParented(HWND_MESSAGE);
end;
class function TRTF.Encode(const AInput: string): string;
var
RichEdit: TRichEdit;
Stream: TStringStream;
begin
RichEdit := CreateRichEdit;
try
RichEdit.Lines.Text := AInput;
Stream := TStringStream.Create;
try
RichEdit.Lines.SaveToStream(Stream);
Result := Stream.DataString;
finally
Stream.Free;
end;
finally
RichEdit.Free;
end;
end;
class function TRTF.Decode(const AInput: string): string;
var
RichEdit: TRichEdit;
Stream: TStringStream;
begin
RichEdit := CreateRichEdit;
try
Stream := TStringStream.Create(AInput);
try
RichEdit.Lines.LoadFromStream(Stream);
Result := RichEdit.Lines.Text;
finally
Stream.Free;
end;
finally
RichEdit.Free;
end;
end;