Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Jürgen Schomann am 03.09.13 - 21:51:37
-
Ich versuche in einem Rich-Text-Feld die Zeichenfolge <NL> durch einen Zeilenumbruch zu ersetzen. Dies funktioniert nicht richtig.
Irgendwie scheint die Positionierung nicht zu stimmen.
Der Codeausschnitt ist hier.
Set rtnav = rtitem.CreateNavigator
bContinue = rtnav.FindFirstString("<NL>")
While bContinue
Call rtitem.BeginInsert(rtnav, True)
Call rtitem.AddNewline(1)
Call rtitem.EndInsert
Call rtitem.Update
bContinue = rtnav.FindNextString("<NL>")
Wend
Der Inhalt vor der Ersetzung
Text1<NL>Firma<NL>Anrede Vorname Name<NL>Straße Nummer<NL><NL>PLZ Ort
Text2
<NL><NL>Gruß
sollte eigentlich danach so ausssehen
Text1
Firma
Anrede Vorname Name
Straße Nummer
PLZ Ort
Text2
Gruß
Das Ergebnis ist aber
Text1
Firma
Anrede Vorname NameStraße Nummer
PLZ Ort
Text2
Gruß
Einige Zeilenumbrüche werden nicht richtig erzeugt. So z. B. zwischen Anrede Vorname Name und Straße Nummer fehlt er. Auch die Leerzeilen werden nicht richtig erzeugt.
Wenn ich den Code wie folgt ändere:
Set rtnav = rtitem.CreateNavigator
Set rtrange = rtitem.CreateRange
bContinue = rtnav.FindFirstString("<NL>")
While bContinue
Call rtrange.SetBegin(rtnav)
Call rtrange.SetEnd(rtnav)
Call rtitem.BeginInsert(rtnav, True)
Call rtitem.AddNewline(1)
Call rtitem.EndInsert
Call rtitem.Update
bContinue = rtnav.FindNextString("<NL>")
Wend
Wird dieser Test richtig. Aber wenn ich unterschiedliche Farben im Text verwende, z. B. für die Anschrift, wird die 1. <NL>-Folge nicht erkannt und sieht so aus
Text
1<NL
>Firma
...
Dies ganze soll eigentlich in einem komplexeren Text erfolgen. Dann gerät aber noch viel mehr durcheinander.
Eigentlich wollte ich die Funktion FindAndReplace für NotesRichTextRange nutzen, um in einem Text Platzhalter zu ersetzen. Doch dies funktioniert nicht, wenn der zu ersetzende Text Zeilenumrüche enthält.
Deshalb ersetze ich vorher die Zeilenumbrüche durch <NL>, um sie danach wie o. g. durch echte Zeilenumbrüche zu ersetzen.
Irgendetwas mache ich wahrscheinlich falsch mit der Positionierung oder ähnlichem.
Kann mir jemand helfen?
-
versuche mal nach dem rtItem.update den Navigator neu zu erzeugen:
Set rtnav = rtitem.CreateNavigator
Set rtrange = rtitem.CreateRange
Dann musst du wieder mit rtnav.FindFirstString("<NL>") nach dem ersten <NL> suchen, da du es ja ersetzt hast (sehe aber aktuell noch keinen Code der das raus löscht)
Gruß
Roland
-
Vielen Dank für deine Antwort. Ich werde morgen weiterprobieren.
Mit folgendem Code lösche ich anschließend alle <NL>-Folgen raus
Set rtrange = rtitem.CreateRange
Call rtrange.FindAndReplace(TEXT_NEWLINE, "", RT_REPL_ALL)
Call rtitem.Update
Hatte ich vorhin vergessen anzugeben.
-
Roland, dein Tipp war ok. Habe es wie folgt geändert, dann wird alles richtig:
Set rtnav = rtitem.CreateNavigator
bContinue = rtnav.FindFirstString("<NL>")
While bContinue
Call rtitem.BeginInsert(rtnav, True)
Call rtitem.AddNewline(1)
Call rtitem.EndInsert
Call rtitem.Update
Set rtrange = rtitem.CreateRange
Call rtrange.FindAndReplace("<NL>", "")
Call rtitem.Update
Set rtnav = rtitem.CreateNavigator
bContinue = rtnav.FindFirstString("<NL>")
Wend
Nochmals vielen Dank.
-
Wuuuhuuu die Suche hat funktioniert!
Bekomme nun keinen duseligen Fehler mehr, das mein Navigator nicht zulässig ist, aber er fügt die Neue Zeile nicht ein
-
Ah Fehler lag bei mir.... wie so oft
hatte noch die NotesRichTextRange benutzt anstatt direkt über der NRT zu gehen. Nun geht es.
Habe ich heute schon die Liebe zu dem Forum ausgedrückt?
:love: