Tabelle über mehrere Seiten, Seitennummer einer Tabellenzeile?

    • Offizieller Beitrag

    Einfach das entsprechende Textobjekt in die Zeile einfügen:

    Code
    WPRichText1.InputTextField(wpoPageNumber);

    oder, wenn man mit TParagraphs (also Zellen) arbeitet:

    Code
    cell.AppendTextObject('PAGE');

    Das funktioniert auch ion header/footer Zellen.

    "PageNr" funktioniert nur denn, wenn der Text formatiert wurde uns dem TParagraph eine sichtbarer Text zugeordnet ist. Bei Reihen und Tabellen macht dies daher keinen Sinn, nur bei Absätzen und Zellen.

  • Danke, funktioniert wie gewünscht!

    Damit kann ich die Seitennummer ausgeben, aber wie bekomme ich aus dem Textobjekt die Seitennummer wenn ich beim Durchlaufen der Tabelle in einer Schleife mit der Seitennummer als Zahl (integer wie auch Pagenr) arbeiten möchte?

    so ala:

    for i := 0 to WPRichText1.Table.RowCount - 1 do

    begin

    zeile := WPRichText1.Table.rows[i];

    if SeitenNummerDieserZeile = 5 then...

    end;


    Ciao

    Stefan

    Einmal editiert, zuletzt von skoschke (4. Januar 2018 um 08:53) aus folgendem Grund: Erweiterung der Antwort

    • Offizieller Beitrag

    Grundsätzlich hat ein text oder tabellen Zeilen keine festen Seitennummern. Zellen werden beim Formatieren Seitennummern zugewiesen. Das kann prinzipiell nicht für header/footer klappen, da diese auf mehreren Seiten gleichzeitig verwendet werden.

    Seitennummern sind eigentlich nur definiert zur Zeit des Drucks oder der Anzeige.

    Daher muss code welcher sich auf Seitennummern bezieht in dem OnPaint event ausgeführt werden. Dort hat man Zugriff auf die aktuelle virtual-page TWPVirtPage welche allen ausgegeben text bzw. die ausgegeben objekte enthält.

    Der folgende code erwartet, dass die ausgegebenen Werte in merge Felder eingebettet sind. Über diese lässt sich der Inhalt sowol im Fliesstext also auch in Tabellenzellen lokalisieren.

  • Danke für das Codebeispiel!

    Nur finde ich den gezeigten Event nicht in meinem TWPRichText!

    Irgendwie fehlt mir da der Zusammenhang...

    Prinzipiell geht das oben gezeigte in die richtige Richtung, Hintergrund ist, dass ich "Übertragszeilen" einer Rechnung in die Tabelle einfügen möchte, da das im Header / Footer nicht gehen kann.

    So muss aber bei jeder Tabellenänderung (z.B. wird eine Zeile durch getippten Text höher) alle bestehenden Übertragszeilen löschen muss und neu einfügen. Dabei durchlaufe ich alle Tabellenzeilen und muss dabei natürlich die aktuelle Seite dieser Tabelle kennen um entsprechend aufsummieren zu können.

    Im Endergebnis soll auf jeder letzten Zeile jeder Seite die Seitensumme und auf der nächsten Seite unter dem Header in der obersten Zeile dies als Übertrag wiederholt werden.

    Oder ist das der ganz falsche Ansatz und das Ganze lässt sich viel eleganter lösen?

    Wir haben die Premium-Version WPTools 8.

    Ciao

    Stefan

    • Offizieller Beitrag

    Grundsätzlich geht das Gewollte in WPTools nicht, so wie es in Word (=Wordprozessor) auch nicht geht.

    Es gibt Möglichkeiten ein derartiges Verhalten zu simulieren. Das geht über Ereignisse welche zur Ausgabezeit auslösen. Die Technik muss aber auf Basis der konkret ausgegebene Daten entwickelt werden - allgemein gültig ist das nie da man auf Feldnamen zugreifen muss.

    Ich kann Ihnen hier gerne helfen - im "free" support kann dieser Service aber nicht enthalten sein.

    Der event DoTextObjectPaintCalcEvent kommt in einer der Demos vor - es handelt sich um ein Event welches einem TWPTextObjekt zugewiesen wurde, also von diesem ausgelöst wird.