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;