InputTextboxen für verschiedene Seiten?

  • Hallo,


    ich habe mehrere Textboxen die auf Seite 1 dargestellt werden sollen und andere, die auf allen Folgeseiten erscheinen sollen.

    Ich habe daher im WPRichTextMeasureTextPage eine Funktion eingebaut, welche anhand der Seitennummer die Textboxpositionierung vorhehmen soll.


    Leider funktioniert das nur bedingt:

    auf Seite 1 ist alles in Ordnung, aber die Textboxen die dann auf Seite 2 gezeichnet werden erscheinen, wenn Seite 3 hinzukommt, auf Seite 3 und auf Seite 2 sind sie nicht mehr vorhanden...


    Gibt es dazu bitte einen Tip?

    Ich vermute das setzen von CPPage ist falsch?

    Nein, wenn ich einzeln neue Textzeilen dem Dokument hinzufüge werden die Textboxen korrekt auf allen Seiten ab Seite 2 wiederholt!

    Mache ich das Hinzufügen vieler Zeilen in einer Schleife (so dass gleich 10 Seiten entstehen) dann ist die Folgeseiten-Textbox nur auf der letzten Seite!

    Das ReformatAll ist da scheinbar wirkungslos?


    Ciao

    Stefan

  • Grundsätzlich erscheint die Textbox immer auf der Seite auf der ihr Anker WPTextObj eingefügt wurde.


    Man müsste also eine feste neue Seite mit inputString(#12) erstellen und in den neuen Absatz dann die Textbox einfügen.


    CPPage ist nicht unbedingt immer exakt da ein Absatz ja über mehrere Seiten gehen kann. Das einfügen der Textbox verschiebt den text, die Formatierung wird ungültig. Insgesamt gesehen scheint mir dies kein gutes Vorgehen zu sein.


    Ich würde die Textboxen in spezielle Header texte einfügen und die Header dann für einzelne Seiten aktivieren mit OnGetSpecialText.

    Das ReformatAll ist da scheinbar wirkungslos?

    Wird das nicht ausserhalb der Schleife aufgerufen?

  • Ja, ich hatte erst ein ReformatAll am Ende der Schleife, es erscheint nur die Textbox auf der letzten Seite, dann ein ReformatAll direkt nach dem Erzeugen der Textboxen, also in jedem Schleifendurchlauf, das gleiche Ergebnis!


    Witzig ist eben, wenn ich per Mausklick den Text (besser die Tabelle) zeilenweise erweitere, wird beim Erreichen einer neuen Seite korrekt WPRichTextMeasureTextPage und darin die Textboxerzeugung aufgerufen und alle Folgeseiten haben die gewünschte Textbox.


    Erweitere ich die Tabelle per Schleife wird auch jeweils das WPRichTextMeasureTextPage aufgerufen und auch die Textboxen erzeugt, nur sind sie am Ende der Schleife bis auf die der letzten Seite nicht mehr vorhanden!


    Hat WPRichTextMeasureTextPage da irgendwelche "Nebenwirkungen"?


    Zitat

    Man müsste also eine feste neue Seite mit inputString(#12) erstellen und in den neuen Absatz dann die Textbox einfügen.

    Geht nicht, das Dokument besteht eigentlich nur aus einer einzigen Tabelle!

    Zitat

    Ich würde die Textboxen in spezielle Header texte einfügen und die Header dann für einzelne Seiten aktivieren

    Gibt es dafür bitte ein paar Zeilen Beispielcode?


    Ciao

    Stefan

  • Einen Header fügt man ja so ein:


    Code
    1.    WPRichText1.HeaderFooter.Get(wpIsHeader,wpraNamed,'MICKEY').WorkOnText := TRUE;
    2.    WPRichText1.InputString('WPTools Documentation');
    3.    WPRichText1.WorkOnText := wpIsBody;


    und aktivieren kann man den dann so gemäss Seitenzahl PageNo


    Code
    1. procedure TForm1.WPRichText1GetSpecialText(Sender: TObject;
    2.   par: TParagraph; PosInPar, PageNr: Integer; Kind: TWPPagePropertyKind;
    3.   var IsLastPage, UseThis: Boolean; var SpecialText: TWPRTFDataBlock);
    4. begin
    5.   // We use 'Get' to find the header or footer
    6.   SpecialText := WPRichtext1.HeaderFooter.Get(Kind, wpraNames, 'MICKEY' );
    7.   // Only then the variable is actually used
    8.   UseThis := TRUE;
    9. end;


    Speichern in RTF geht natürlich nicht, da dort nur die standard header positionen unterstützt werden.

  • // var RTFDataBlock : TWPRTFDataBlock;

    RTFDataBlock := WPRichText1.HeaderFooter.Get(wpIsHeader,wpraOnFirstPage,'');

    WPRichText1.ActiveText := RTFDataBlock;

    WPRichText1.InputTextbox('', 2000, 300, true).RelY := 300;

    WPRichText1.InputString('Diese Box steht im Header');

    WPRichText1.ActiveText := RTFDataBlock;

    WPRichText1.InputTextbox('', 2000, 300, true).RelY := 2000;

    WPRichText1.InputString('Diese Box steht auch im Header');

    WPRichText1.ActiveText := WPRichText1.BodyText;


    wpraOnFirstPage habe ich zum Testen genommen.

  • Danke, aber so weit war ich anhand der Beispiele im Manual auch schon.


    Das Problem dabei:

    Ich nehme obigen Code (aber mal mit wpraOnAllPages), die Textboxen erscheinen auf der ersten Seite.


    Jetzt klicke ich in den Text und halte Enter fest, es werden massenhaft neue Zeilen hinzugefügt.


    Sobald die zweite Seite erreicht ist, sind die Textboxen zwar auch auf Seite 2 vorhanden aber auf allen (auch der ersten Seite) jetzt leer!


    Ein weiteres Problem:

    RelY := 0 bringt die Textbox nicht an den oberen Seitenrand!

    RelX := 0 wirkt wie erwartet.


    Aber das Hauptproblem ist, warum verschwinden die Texte sobald die zweite Seite erreicht wird?

    Und warum werden sie mit wplayLayout und anderen Layouteinstellungen gar nicht angezeigt, nur mit wplayFullLayout, was ich später für den Anwender nicht haben möchte?


    Ciao

    Stefan

  • Die Textboxen können auch an Seite oder am Absatz gebunden sein. Wenn am Absatz gebunden, stehen sie immer unterhalb.


    Wenn am Header gebunden fängt "ihre" Seite aber an der Oberkante des Headers an, RelY muss demnach negativ sein.

    Zur Eingabe sind solche Boxen ohnehin nicht geeignet, sondern nur zur Ausgabe, Briefkopf o.ä.


    Ich weiss jetzt nicht was Sie machen wollen, aber einen Formular Editor kann man damit nicht bauen.


    Mehrseitige Textboxen werden nicht unterstützt - Textboxen zeigen immer nur den Text der in die Box passt, bzw. dessen erste Seite die leer ist, wenn dort nur #13 stehen.


    wplayLayout zeigt keine Header texte an und damit auch nicht die Textboxen, welche dort verankert sind.

    Daher geht nur full layout, kein Normal o.a.

  • Nein, es soll kein Formulareditor sein, sondern z.B. Rechnungen anzeigen.


    Auf der ersten Seite steht zum Beispiel der Adressblock, die Rechnungsnummer, Projektnummer etc. und die sollen mit einem eigens entwickelten Formulardesigner frei positionierbar sein, deswegen die Inputtextboxen frei positionierbar .

    Alle Folgeseiten enthalten dann z.B. im Header die Seitennummer, das Datum etc. deren Position auch vom Anwender im Designer festgelegt wurde.

    Der "echte Textbereich" besteht nur aus einer einzigen Tabelle, welche dann aber auch mal 50 Seiten umfassen kann.


    Die Positionierung der Textboxen funktioniert ja auch, aber nicht gelöst ist das Problem dass ihr Inhalt beim Erreichen einer neuen Seite verlorengeht!

    Bei folgendem Code, hier sind Images anstelle der Textboxen, geht deren Inhalt nicht verloren!

    Wie kann ich erreichen, dass in folgendem Code, wenn er als ersten im leeren WPRichText1 die Boxen erzeugt, dann beim Füllen des Textes der Inhalt der Textboxen beim Erreichen der zweiten Seite nicht verschwindet?

    Bei wpraOnFirstPage passiert das nicht, bei wpraOnEvenPages passiert das Gleiche, die ersten Textboxen sind korrekt, wächst der Text über mehrere Seiten und die Header werden "wiederholt" verschwindet der Inhalt der Textboxen!

    Code
    1. RTFDataBlock := WPRichText1.HeaderFooter.Get(wpIsHeader, wpraOnAllPages , '');
    2. WPRichText1.ActiveText := RTFDataBlock;
    3. WPRichText1.InputTextbox('', 2000, 300, true).RelY := 300;
    4. WPRichText1.InputString('Diese Box steht im Header');
    5. WPRichText1.ActiveText := RTFDataBlock;
    6. WPRichText1.InputTextbox('', 2000, 300, true).RelY := 2000;
    7. WPRichText1.InputString('Diese Box steht auch im Header');
    8. WPRichText1.ActiveText := WPRichText1.BodyText;

    Wenn möglich oder notwendig erstelle ich auch mal ein Miniprojekt was das demonstriert, kann ich das hier irgendwie hochladen?


    Ciao

    Stefan

  • Zitat

    Auf der ersten Seite steht zum Beispiel der Adressblock, die Rechnungsnummer, Projektnummer etc. und die sollen mit einem eigens entwickelten Formulardesigner frei positionierbar sein, deswegen die Inputtextboxen frei positionierbar .

    Ich halte dies für keine gute Idee. Textboxen können verwendet werden um alles um die Rechnung zu gestalten, aber für den Inhalt würde ich sie auf gar keinen Fall nehmen. Ich weiss auch nicht was der Vorteil sein wird. Die erzeugten Dokumente lassen sich nicht als DocX speichern da die Textboxen ja auf jeder Seite vorkommen sollen. Am 9.10. hatten Sie mich gefragt: "ich versuche ... in einem Dokument Texte fest zu positionieren, also wie bei einem Briefkopf den Adressblock. Rechts davon soll ein ebenso fest positioniertes Image sitzen (Firmenlogo)" - von dieser Nutzung bin ich bislang auch ausgegangen. Die Textboxen sollten das Problem lösen.


    Zitat

    Wenn möglich oder notwendig erstelle ich auch mal ein Miniprojekt was das demonstriert, kann ich das hier irgendwie hochladen?

    Meine e-mail kennen Sie ja. Ich muss allerdings den support hierzu berechnen, da dies keine Standard Nutzung ist. Es sind inzwischen auch schon eine menge Anfragen.


    Ein Verschwinden des Textes kann ich nicht nachvollziehen. Intern ist es so, die Textbox enthält text welcher an der Grösse der Box umgebrochen wird. Evtl. wird eine 2. Seite erstellt welche dann aber nicht mehr angezeigt wird. Im Zweifelsfall speichern Sie das Dokument bitte im WPT Format und schicken es mir. Ich sehe es mir dann hier an und kann beurteilen, ob WPTools im Sinne des Erfinders arbeitet.


    Grüsse,

    Julian

  • Hallo,

    dank Patch funktioniert nun die Anzeige der Textboxen, aber editieren darin kann ich nicht :-(

    Bei einem Klick auf die Textbox erscheinen die beiden gepunkteten Headerlinien und der Cursor steht darin...


    Wie kann der Anwender nun den Text in der Box ggf. editieren?


    Ciao

    Stefan

  • Ich war gerade mal auf der Downloadseite, dort liegt immer noch die WPTOOLS 8 vom 3.11.2017...

    Wann ist denn mit der erweiterten Version zu rechnen?


    Und wenn an den Textboxen etwas gemacht wird, wäre es dann auch möglich, die Border-Einstellungen auch auf "no Borders" einstellbar zu machen?


    Ciao

    Stefan