Autor Thema: Probleme mit NotesRichTextNavigator.FindFirstString/FindNextString  (Gelesen 2862 mal)

Jürgen Schomann

  • Gast
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?

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Jürgen Schomann

  • Gast
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.

Jürgen Schomann

  • Gast
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.

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
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:
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz