Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: haeppchen am 19.03.05 - 11:35:04

Titel: Text in RT-Feld finden und löschen
Beitrag von: haeppchen am 19.03.05 - 11:35:04
Hallo zusammen,

ich habe ein Rich-Text-Feld, das Text enthält aber auch Bilder, Tabellen etc.
Ich möchte jetzt NUR DEN TEXT aus diesem RT-Feld löschen, alles andere soll bestehen bleiben.

Bisher verwende ich folgenden Code (Java), der aber leider den kompletten Inhalt des RT-Feldes löscht:

         
rtTemp = (RichTextItem)docNeu.getFirstItem("RT_Temp");
rtNav = rtTemp.createNavigator();
            
if (rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH))
{
     RichTextRange rtRange = rtTemp.createRange();
     do
     {
        rtRange.setBegin(rtNav);
                    
        if (rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH))
            rtRange.remove();
     }
     while (rtNav.findNextElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH));
}


Wer kann mir weiterhelfen? Wie komme ich an die Textelemente des RT-Feldes dran, um nur diese zu löschen?

Gruß, Simon
Titel: Re: Text in RT-Feld finden und löschen
Beitrag von: TMC am 19.03.05 - 13:37:20
Ich befürchte das geht nicht so ohne weiteres.

Ich denke eine Möglichkeit wäre, über DXL da ranzugehen und entsprechend den Text entfernen. Müsste man mal untersuchen wie die Tags für den Text aussehen, und eben diese dann mit Inhalt (oder nur den Inhalt) rauswerfen.
Titel: Re: Text in RT-Feld finden und löschen
Beitrag von: koehlerbv am 21.03.05 - 23:59:57
Simon, was auf jeden Fall noch fehlt, ist das SetEnd des RTRange auf das gefundene Textelement. Du setzt zwar mit SetBegin, aber SetEnd bleibt immer beim Default - des Range-Ende, also dem Ende des RTItems - stehen.
Praktisch umgesetzt habe ich das aber auch noch nie.

Vielleicht hilft es ...

Bernhard
Titel: Re: Text in RT-Feld finden und löschen
Beitrag von: haeppchen am 25.03.05 - 15:08:23
Hallo zusammen,

@Bernhard:
Danke für deinen Tipp, es lag wirklich daran, dass ich das SetEnd beim RichTextRange vergessen hatte.

Jetzt habe ich noch ein kleines Problem:
In meinem RT-Feld ist jetzt der komplette Text entfernt worden und alle EmbeddedObjects wurden erhalten (so wie ich das wollte !!)
Leider stehen jetzt dort, wo vorher Text vorhanden war, leere Zeilen, dadurch ist mein RT-Feld noch genauso groß wie vorher.
Wie kann ich diesen überflüssigen Platzverbrauch verhindern bzw. das RT-Feld auf den Platz "zusammenschrumpfen", den die dort enthaltenen EmbeddedObjects benötigen?

Habe es bisher mit rti.compact() versucht aber ohne Erfolg.
Mein Java-Code:

private void removeText(Document docNeu)
   {
      try
      {   
         rtTemp = (RichTextItem)docNeu.getFirstItem("RT_Temp");
         rtNav = rtTemp.createNavigator();
            
         if (rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH) |
            rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTRUN))
         {
            RichTextRange rtRange = rtTemp.createRange();
            do
            {
                rtRange.setBegin(rtNav);
                rtRange.setEnd(rtNav);
                rtRange.remove();
                rtTemp.update();   
            }
            
            while (rtNav.findNextElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH) |
                  rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTRUN));
         }
         rtTemp.compact();
      }
      catch(Exception e) {e.printStackTrace();}
   }



Gruß, Simon
Titel: Re: Text in RT-Feld finden und löschen
Beitrag von: haeppchen am 29.03.05 - 15:11:01
Hallo zusammen,

konnte mein neu entstandenes Problem leider übers Wochenende nicht lösen, habe nach wie vor folgendes Problem:

Habe aus einem RT-Feld Text entfernt mit rtRange.remove(), so dass nur noch Bilder, Tabellen oder adere EmbeddedObjects enthalten sind.
Wie kann ich den Platz, den der Text vorher eingenommen hat, komprimieren? (dort stehen jetzt nur noch leere Zeilen). Das RT-Feld nimmt momentan unnötig viel Platz in Anspruch.
Habe es mit rti.compact() versucht, aber erfolglos.

Würde mich über Hilfe sehr freuen!!


Gruß, Simon