Zeilenumbruch bei par.LoadfromX

  • Hallo,

    beim Laden eines RTF-Strings /-Streams oder -Files in einen Paragraph, welcher manuelle Zeilenumbrüche besitzt, wird genau der erste Zeilenumbruch ignoriert bzw. entfernt, wie man am geladenen RTF-String sehen kann. Alle weiteren funktionieren dann.

    Beispiel:

    Datei test.rtf:

    {\rtf1\ansi\deff0\uc1\ansicpg1252\deftab720{\fonttbl{\f0\fnil\fcharset1 Segoe UI;}{\f1\fnil\fcharset1 Arial;}{\f2\fnil\fcharset2 Wingdings;}{\f3\fnil\fcharset2 Symbol;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;\red68\green68\blue68;}\wpprheadfoot1\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\headery720\footery720\endnhere\sectdefaultcl{\*\generator WPTools_8.008;}{\plain\fs20\cf16 Zeile 1\par \plain\fs20\cf16 Zeile 2\par \plain\fs20\cf16 Zeile 3\par }}

    Sieht so aus:

    3-Zeilig

    Code
    with WPRichText1.FastAppendParagraph do
      begin
        LoadFromFile('test.rtf');
      end;

    Dabei kommt dann das hier raus:

    2-Zeilig

    • Windows 10 Version 1809
    • Delphi 10.2 Update 3
    • WPTools 8.01.1

    Übrigens: Packe ich den Paragraphen in eine Tabellenzelle, funktioniert das ganze ohne Probleme.

    Vielen Dank im Voraus.

    • Offizieller Beitrag

    Es ist ungewöhnlich mehrere Absätze in einen einzelnen Absatz zu laden. Vermutlich wollen Sie in die Absatz Kinder laden, denn dies ist eigentlich das, wofür es par.Load gibt. (Ansonsten könnte man ja gleich an der Cursor Position einfügen und dafür die normalen Load Funktionen nutzen.)

    So werden dann Child Paragraphs erzeugt - dies passier in einer Tabellen Zelle immer

    WPRichText1.ActivePar.LoadFromString(str,[wploadpar_AsChildrenPar]);

  • Deine Version 8.1.1 ist von Novemver 2017!

    In dem RTF-Auszug steht aber WPTools_8.008...

    Die Versionsnummer habe ich aus dem history-file. Das gleiche steht auch in der property "RTFText". Das erzeugen des RTF-strings und das wieder einlesen erfolgt durch die gleiche Komponente, nur verschiedene Instanzen davon, das sollte also funktionieren.

    Zitat

    Es ist ungewöhnlich mehrere Absätze in einen einzelnen Absatz zu laden. Vermutlich wollen Sie in die Absatz Kinder laden, denn dies ist eigentlich das, wofür es par.Load gibt. (Ansonsten könnte man ja gleich an der Cursor Position einfügen und dafür die normalen Load Funktionen nutzen.)

    Es handelt sich um eine Druckausgabe. Der User gibt an mehreren Stellen Texte ein, die ich dann zu einem Dokument zusammenfasse. Dazu lege ich jeweils einen Absatz an und befülle diesen mit den Texten vom User. Diese können durchaus mehrere Absätze oder (im schlimmsten Fall) auch Seiten haben.

    Die "normale Load Funktion" wäre dann Richtext.LoadFromString()? Die gibt mir leider den Paragraphen nicht zurück.

    [wploadpar_AsChildrenPar]

    Damit klappt es ! Das erzeugt zwar jetzt noch einen zusätzlichen Absatz, den ich dann wieder löschen muss, aber das kann man ja machen.

    Was ist eigentlich der Grund dafür, dass das erste \par entfernt wird?

    Danke !

    • Offizieller Beitrag
    Zitat

    Damit klappt es ! Das erzeugt zwar jetzt noch einen zusätzlichen Absatz, den ich dann wieder löschen muss, aber das kann man ja machen.

    Was ist eigentlich der Grund dafür, dass das erste \par entfernt wird?

    Das ist ein Fehler - er wird im nächsten Build nicht mehr sein. Eigentlich sollte der Absatz *nach* dem text entfernt werden (DeleteParagraphEnd) da der RTF reader immer einen Absatz am Ende anhängt. Dies liegt an dem \par am ende.

    Zitat

    Es handelt sich um eine Druckausgabe. Der User gibt an mehreren Stellen Texte ein, die ich dann zu einem Dokument zusammenfasse. Dazu lege ich jeweils einen Absatz an und befülle diesen mit den Texten vom User. Diese können durchaus mehrere Absätze oder (im schlimmsten Fall) auch Seiten haben.

    Die "normale Load Funktion" wäre dann Richtext.LoadFromString()? Die gibt mir leider den Paragraphen nicht zurück.

    In einen Absatz laden, könnte durchaus zu Problemen führen, da sie für das reine Aneinander hängen von Texten eigentlich nicht gedacht ist. Es wird eine besondere verschachtelte Struktur erzeugt wenn man dies benutzt.

    Man kann den aktuellen Absatz mit ActivePar auslesen oder CPPosition lesen und schreiben. Damit kann man die Position nach dem normalen Laden verändern.

  • Das ist ein Fehler - er wird im nächsten Build nicht mehr sein.

    Super !

    In einen Absatz laden, könnte durchaus zu Problemen führen, da sie für das reine Aneinander hängen von Texten eigentlich nicht gedacht ist. Es wird eine besondere verschachtelte Struktur erzeugt wenn man dies benutzt.

    Hat bisher immer gut funktioniert. Ich werde das aber im Hinterkopf behalten.

    Vielen Dank !