Verwenden von TRichEdit zur Laufzeit, ohne ein übergeordnetes Element zu definieren

Ich muss zur Laufzeit ein TRichEdit verwenden, um die RTF-zu-Text-Konvertierung wie beschrieben durchzuführen.Hie. Das ist mir gelungen, aber ich musste ein Dummy-Formular als übergeordnetes Formular festlegen, wenn ich die TRichedit.Lines nicht ausfüllen kann. (Fehler: Elternteil fehlt). Ich füge meine Funktion unten ein. Kann jemand einen Weg vorschlagen, um die Definition eines Elternteils zu vermeiden? Kannst du das auch kommentieren und mir sagen, ob du eine performantere Idee findest?

Hinweis: Ich brauche einen String, nicht TStrings als Ausgabe. Deshalb wurde er so entworfen.

function RtfToText(const RTF: string;ReplaceLineFeedWithSpace: Boolean): string;
var
  RTFConverter: TRichEdit;
  MyStringStream: TStringStream;
  i: integer;
  CustomLineFeed: string;

begin
  if ReplaceLineFeedWithSpace then
    CustomLineFeed := ' '
    else
    CustomLineFeed := #13;
  try
    RTFConverter := TRichEdit.Create(nil);
    try
      MyStringStream := TStringStream.Create(RTF);
      RTFConverter.parent := Form4; // this is the part I don't like
      RTFConverter.Lines.LoadFromStream(MyStringStream);
      RTFConverter.PlainText := True;
      for i := 0 to RTFConverter.Lines.Count - 1 do
      begin
        if i < RTFConverter.Lines.Count - 1 then
          Result := Result + RTFConverter.Lines[i] + CustomLineFeed
          else
          Result := Result + RTFConverter.Lines[i];
      end;
    finally
      MyStringStream.Free;
    end;
  finally
    RTFConverter.Free;
  end;

end;

AKTUALISIERE: Nach der Antwort habe ich die Funktion aktualisiert und schreibe sie hier als Referenz:

function RtfToText(const RTF: string;ReplaceLineFeedWithSpace: Boolean): string;
var
  RTFConverter: TRichEdit;
  MyStringStream: TStringStream;
begin
  RTFConverter := TRichEdit.CreateParented(HWND_MESSAGE);
  try
    MyStringStream := TStringStream.Create(RTF);
    try
      RTFConverter.Lines.LoadFromStream(MyStringStream);
      RTFConverter.PlainText := True;
      RTFConverter.Lines.StrictDelimiter := True;
      if ReplaceLineFeedWithSpace then
        RTFConverter.Lines.Delimiter := ' '
        else
        RTFConverter.Lines.Delimiter := #13;
      Result := RTFConverter.Lines.DelimitedText;
    finally
      MyStringStream.Free;
    end;
  finally
    RTFConverter.Free;
  end;
end;

Antworten auf die Frage(8)

Ihre Antwort auf die Frage