Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: bikerboy am 26.06.09 - 13:07:07

Titel: RichText. formatierten Text kopieren
Beitrag von: bikerboy am 26.06.09 - 13:07:07
Hallo,

wie kann ich denn formatierten Text aus einem RT in ein anderes kopieren ?

Würde ungerne über des Frontend gehen.

Über rtItem1.appendRTItem(rtItem2) geht es nicht, weil er den Inhalt ja immer ans Ende packt. Ich möchte aber den Inhalt an die aktuelle Stelle des Cursors kopieren.
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: Thomas Schulte am 26.06.09 - 13:50:16
Das geht NICHT mit Bordmitteln. Ulrich hat mal einen Versuch gestartet, weil wir das in HELP auch gerne gehabt hätten, aber wir sind daran gescheitert. MIDAS kann das.
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: Gandhi am 26.06.09 - 14:13:52
Wer lesen kann ist klar im Vorteil ... habe das "nicht" bei Frontend überlesen.
So würde es im Frontend gehen...
Code
			'Copy Body Item
			Call uidoc.GoToField( "Body" )
			Call uidoc.SelectAll
			Call uidoc.Copy
			
			'Paste to Body2 Item
			Call uidoc.GotoField("Body2")
			Call uidoc.Paste
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: Demian am 26.06.09 - 14:21:18
So würde es im Frontend gehen...
Code
			'Copy Body Item
			Call uidoc.GoToField( "Body" )
			Call uidoc.SelectAll
			Call uidoc.Copy
			
			'Paste to Body2 Item
			Call uidoc.GotoField("Body2")
			Call uidoc.Paste


Was spricht dagegen, die docs im Backend zu holen über work.editdocument zu öffnen, im Frontend zu kopieren und die frontend docs wieder zu schließen? Im schlimmsten Fall sieht der User ein kurzes Flackern, denke ich.
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: bikerboy am 26.06.09 - 14:22:28
Habe eine nun was getüffelt mit Maske die nur das gewünschte Feld beinhaltet und dann per RenderToRichText den Inhalt formatiert kopiert bekommen, leider nicht an der Stelle wo ich den Cursor geparkt habe

Also habe mir das passende Dokument geholt

Form auf Dummy-Maske angepasst in der nur das RT erscheint

und dann Dokument.RendertoRichTextItem(rtTMP)

Aber man kann das RenderToRichText nicht innerhalb eines BeginInsert benutzen, Ärgerlich, aber vllt hilft euch das ja auch schon weiter
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: bikerboy am 26.06.09 - 14:24:09
Gegen Frontend spricht, dass ich den Vorgang vllt 20 oder mehr wiederholen muss. kackt mir der code irgendwo ab muss ich per ErrorHandling sicherstellen, dass wirklich wieder alles zu geht.

Naja und Backend ist mir einfach lieber, will nicht das der User denkt dass sein Bildschirm flackert
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: Gandhi am 26.06.09 - 16:38:41
Zitat
muss ich per ErrorHandling
Äh...wie schrecklich.... ;)
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: Demian am 26.06.09 - 18:08:23
habe mir die Klassen eben mal näher angeschaut und etwas rumprobiert. Wenn du ein Quelldoc mit zum Beispiel einer Zeile rot formatiertem Text hast, kannst du die Formatierung über NotesRichTextRange in ein neues doc übernehmen:

   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim docSource As NotesDocument
   Dim rtitemSource As NotesRichTextItem
   Dim rtrangeSource As NotesRichTextRange
   Dim styleSource As NotesRichTextStyle   
   Dim navsource As NotesRichTextNavigator
   Dim Text As String
   
   Dim docNew As NotesDocument
   Dim rtitemNew As NotesRichTextItem
   Dim rtrangeNew As NotesRichTextRange
   
   Set db = s.CurrentDatabase
   Set view = db.GetView("lkpBodyDoc")
   
   'get old
   Set docSource = view.GetFirstDocument
   Set rtitemSource = docSource.GetFirstItem("Table")
   Set rtrangeSource  = rtitemSource.CreateRange
   Text = rtrangesource.TextRun
   Set StyleSource = rtrangeSource .Style   
   
   'set new
   Set docNew = db.CreateDocument
   docNew.form = "libTest"
   docNew.Nr = "2"
   Set rtitemNew = docNew.CreateRichTextItem("Table")
   Call rtitemNew.AppendText(Text)
   Set rtrangeNew = rtItemNew.CreateRange
   Call rtrangeNew.SetStyle(StyleSource)
   
   Call docNew.Save(True,False)


Das drumherum fehlt halt noch.

EDIT: Stelle gerade fest, wenn der Debugger angeschaltet ist übernimmt er die Formatierungen nicht. Nur wenn der aus ist. Zumindest bei mir (Version 7.0).
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: pram am 26.06.09 - 22:50:26
Könntest du nicht das RT-Item aus Doc1 und Doc2 in ein TempDoc kopieren (ggf. umbenennen) , dann die Form auf eine Dummyform setzen welche Doc2Rtitem und darunter Doc1Rtitem enthält und dann per renderToRtItem das TmpDoc wieder ins RT-Item von Doc1 zurückrendern. Dies dürfte dir aber zu 99% die Randeinstellungen irgendwie verschieben. Hier ist probieren angesagt.
(Ich tipp mal, man muss den Rand auf 1,905 stellen, das ist der Wert, dass bei einer Dialogbox, welche 100% breit ist, kein horizontaler Scrollbalken kommt)

Eine andere Möglichkeit wäre noch, beide Dokumente in einen DXL-Stream zu exportieren und die RT-Items per DOM-Parser oder XSLT zu "verwursteln"

Gruß
Roland
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: Thomas Schulte am 27.06.09 - 06:39:04
Alle Lösungswege die hier versucht werden, haben wir ebenfalls versucht. Fakt ist, es ist, ausser mit der C API, die Geniisoft verwendet, NICHT möglich ein RTITEM im Backend an eine BELIEBIGE Stelle in ein anderes RTITEM einzuügen.
Titel: Re: RichText. formatierten Text kopieren
Beitrag von: Demian am 27.06.09 - 13:40:36
...NICHT möglich ein RTITEM im Backend an eine BELIEBIGE Stelle in ein anderes RTITEM einzuügen...

er wollte doch "nur" formatierten Text an eine beliebige Stelle kopieren nicht das Ganze Item, oder? Das müsste mit NotesRichTextRange in Verbindung mit NotesRichTextNavigator (rtrange.setbegin(nav)) doch eigentlich gehen.