Hallo,
zu 1.
StringReplace kenn/nutze ich nicht, aber die sollte IMHO #0 finden,
was hast Du denn an StringReplace übergeben?
Weis jetzt nicht genau wie Du die RTF-Codes zusammensetzt,
das ist auch noch eine Möglichkeit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function GetRTFFromRichEditNoNUL(aRichEdit: TRichEdit): String; var StrS : TStringStream; begin StrS := TStringStream.Create(''); try aRichEdit.Lines.SaveToStream(StrS); Result := StrS.DataString; if Result[Length(Result)] = #0 then Result := Copy(Result,1,Length(Result)-1); finally StrS.Free; end; end;
procedure TForm1.AnhaengenClick(Sender: TObject); var sRTF : String; begin sRTF := GetRTFFromRichEditNoNUL(RichEdit1); sRTF := sRTF+GetRTFFromRichEditNoNUL(RichEdit2); end; |
zu 2.
Beispiel-RTF-Ausgabedatei:
Quelltext
1: 2: 3: 4: 5:
| 00000000h: 7B 5C 72 74 66 31 5C 61 6E 73 69 5C 61 6E 73 69 ; {\rtf1\ansi\ansi --- Schnipp ---- 00000080h: 70 61 72 64 5C 66 30 5C 66 73 31 36 20 44 65 6C ; pard\f0\fs16 Del 00000090h: 70 68 69 2D 46 6F 72 75 6D 5C 66 31 20 0D 0A 5C ; phi-Forum\f1 ..\ 000000a0h: 70 61 72 20 7D 0D 0A 00 ; par }... |
Es werden immer nach der abschließenden '}'-Klammer 0D und 0A (#13#10, Zeilenumbruch) mitgepeichert, die für den eigentlichen RTF-Code nicht relevant sind.
Habe ich jetzt kein 00 und lösche das letzte Zeichen, dann lösche ich 0A.
Das hat keine Auswirkungen, da ein RTF-Reader 0D und 0A nicht interpretiert.
(
zu 3.

hab vor Jahren(zu Win 3.11-Zeiten) ein Programm zum erstellen von Winhelp-Dateien geschrieben,
seit der Zeit kämpfe ich mit den unterschiedlichen Winhelp-Compilern, RTF-Spezifikationen und riched.dll-Versionen/Betriebssystemen.)