Autor Thema: RichTextFeld in anderes Dokument kopieren  (Gelesen 3410 mal)

Offline RunRevilo

  • Junior Mitglied
  • **
  • Beiträge: 51
  • Geschlecht: Männlich
RichTextFeld in anderes Dokument kopieren
« am: 29.01.15 - 10:01:04 »
Hallo,

ich  möchte gerne ein RichTextFeld, in welchem Text und Anhänge sein können, von einem Dokument in ein anderes Dokument kopieren. Solange ich beim eingeben vom Text keine ENTER-Taste benutze klappt es auch einwandfrei.
Wird im zu kopierende RichTextFeld jedoch mit der ENTER-Taste ein Absatz gemacht, so wird alles nach der Enter-Taste beim kopieren weggelassen.

Im zu kopierenden RichtTextFeld soll noch vor dem eingefügten Inhalt eine Text mit dunkelroter Farbe stehen, mit den Mitarbeiter wer das eingefügt hat.

Hier die betreffenden Codezeilen

Code
'Richtextitem aus Doc1 holen
Set rtitemInt=doc1.GetFirstItem(Betreff) 

'Farbe auf Dunkelrot stellen und gewünschten Text in neues RichTextItem schreiben
'damit ich es vor dem eingefügten Inhalt stellen kann.

richStyle.NotesColor=COLOR_DARK_RED
Call rtitemText.AppendStyle(richStyle)
Call rtitemText.AppendText(strInfo)

'Ein neues RichTextItem erstellen und zuerst den roten Text einfügen und dann den Inhalt des anderen Richtextfeldes
'dann dieses RichTextItem in das doc2 kopieren.
Set rtitemBericht=docGespr.CreateRichTextItem("value")
Call rtitemBericht.AppendRTItem(rtitemText)
Call rtitemBericht.AppendRTItem(rtitemInt)
Call rtitemBericht.CopyitemtoDocument(doc2,"Bericht")

Zur Veranschaulichung die Screenshots
Bild1: RichTextFeld aus Doc1 mit Text und Bild, ohne Verwendung der ENTER-Taste
Bild2: RichTextFeld aus Doc2 in welchem richtig hineinkopiert wurde.
Bild3: RichTextFeld aus Doc1 mit Text und Bild, mit Verwendung der ENTER-Taste, damit Bild in eigener Zeile steht
Bild4: RichTextFeld aus Doc2, wo alles nach der ENTER-Taste nicht mitkopiert wurde.
Grüße aus dem schönen Südtirol
Oliver C

Es gibt keine dummen Fragen, sondern nur dumme Antworten

Laufen ist der ideale Ausgleich zu jeglicher Arbeit, denn beim Laufen muss man nicht Denken.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: RichTextFeld in anderes Dokument kopieren
« Antwort #1 am: 29.01.15 - 10:51:40 »
Also: Wenn man Richtext- Items manipuliert, sollte man immer ein "NotesRichtextItem.Update" druchführen, bevor man den Inhalt "weiterverwendet". Auszug aus der Hilfe:
Zitat
Operations on a rich text item are queued for efficiency. The order and time of completion are not predictable. Use this method to ensure that processing is complete at a certain point.

Grundsätzlich halte ich das verwenden eines "Zwischen- Richtext- Feldes" nicht für nötig, und WENN, dann würde ich dieses nicht in einem der beteiligten Dokumente anlegen, denn ein versehentliches Speichern führt dazu, dass jeder weitere Aufruf den "alten Quatsch" mitkopiert.

Du hast also -imho- viel zu viele Richtext- Items involviert. Woher kommt eigentlich "rtItemText" und dessen Inhalt? Das fehlt noch im Code- Beispiel. Wenn Du das angibst, kann man Dir sicher besseren Code mit weniger involvierten RT- Items geben.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Mitch

  • Gast
Re: RichTextFeld in anderes Dokument kopieren
« Antwort #2 am: 29.01.15 - 10:53:41 »
Hallo,

das kenne ich auch. Richtextstyles verhalten sich manchmal seltsam. Ich habe die Erfahrung gemacht, dass Styles nicht auf leere Richtextitems angewendet werden können, sondern dass dort schon etwas drin stehen muss. Zum Beispiel eine Leerzeile.

Also anstatt:
Code
Set rti = doc.GetFirstItem("Comment")
Call rti.AppendStyle(rtsBold)
Call rti.AppendText("Text der nicht fett wird wenn Comment vorher leer war")

... eine Leerzeile einfügen:
Code
Set rti = doc.GetFirstItem("Comment")
Call rti.AddNewline(1)
Call rti.AppendStyle(rtsBold)
Call rti.AppendText("Text wird fett, auch wenn Comment vorher leer war")

Ursachenforschung habe ich nicht betrieben, der Workaround reichte mir aus.

Gruß,

Mitch

Offline RunRevilo

  • Junior Mitglied
  • **
  • Beiträge: 51
  • Geschlecht: Männlich
Re: RichTextFeld in anderes Dokument kopieren
« Antwort #3 am: 29.01.15 - 11:40:39 »
@Tode: habe jetzt NotesRichtextItem.Update eingebaut und es kopiert jetzt auch den Teil nach dem Enter

Das "rtItemText" benutzte ich um als erste Zeile das Datum und den User in dunkelroter Farbe zu schreiben.

strInfo="> " +strDatum + " " + user + " Intensivierungsgespräch:" + Chr(10)

Ich Frage zuerst ab ob es as "rtItem Text"  gibt oder nicht. Und sicherheitshalbe lösche ich es auch immer nach dem Aufruf der Methode


Code
strInfo="> " +strDatum + " " + user + " Intensivierungsgespräch:" + Chr(10)
..

If Not doc1.HasItem("red") Then
	Set rtitemText=docGespr.CreateRichTextItem("red")
Else
	Set  rtitemText=docGespr.GetFirstItem("red")
End If

Call rtitemText.AppendStyle(richStyle)
Call rtitemText.AppendText(strInfo)
..
..
Call doc1.save(True,False)
Call rtitemText.remove


Ich benutze die ganzen Richtext-Items, da es wenn es im doc2 bereits was im RichtextFeld steht, der zu kopierende Teil, am Anfang angehängt werden soll. Und das ist mir anders nicht gelungen. Da hat es mir den kopierten Teil immer ans Ende eingefügt.
Muss diesen Teil des Skripts aber erst noch mal inplementieren, da ich dort auch das Problem mit der Enter-Taste hatte und das zuerst lösen wollte.

Inzwischen Danke für die Hinweise.





Danke inzwischen
Grüße aus dem schönen Südtirol
Oliver C

Es gibt keine dummen Fragen, sondern nur dumme Antworten

Laufen ist der ideale Ausgleich zu jeglicher Arbeit, denn beim Laufen muss man nicht Denken.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: RichTextFeld in anderes Dokument kopieren
« Antwort #4 am: 29.01.15 - 12:09:20 »
OK, dann will ich mich in die "Logik" nicht weiter einmischen. Wenn das mit dem "Update" nun funktioniert, ist ja Dein Problem wenigstens behoben.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline RunRevilo

  • Junior Mitglied
  • **
  • Beiträge: 51
  • Geschlecht: Männlich
Re: RichTextFeld in anderes Dokument kopieren
« Antwort #5 am: 29.01.15 - 16:37:11 »
Da habe ich mich wohl zu früh gefreut.

Wenn ich im RichTextFeld Text und Bilder habe, dann wird alles korrekt kopiert (mit den Absätzen, also Text vor und nach der Enter Taste).

Wenn ich nur Text im zu kopierenden RichTextFeld habe, dann wird der Text nach der Enter-Taste nicht mit kopiert.

Folgender Code funktioniert für Text und Bild

Code
Set rtitemInt=doc1.GetFirstItem(Betreff)
richStyle.NotesColor=COLOR_DARK_RED
Call rtitemBericht.AppendStyle(richStyle)
Call rtitemBericht.AppendText(strInfo)
Call rtitemBericht.Update 
Call rtitemBericht.AppendRTItem(rtitemInt)
Call rtitemBericht.Update
Call rtitemBericht.CopyitemtoDocument(doc2,"Bericht")

Wieso wird, wenn im rtitemInt nur Text steht, der Text, welcher nach einer Enter-Taste steht nicht mitkopiert?

Oder hat jemand einen Tip wie ich es anders lösen kann?

Danke


Grüße aus dem schönen Südtirol
Oliver C

Es gibt keine dummen Fragen, sondern nur dumme Antworten

Laufen ist der ideale Ausgleich zu jeglicher Arbeit, denn beim Laufen muss man nicht Denken.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz