Hallo,
schon mal von dem folgenden Phänomen gehört?
In einem Report gibt es das Richtext-Feld "rtGeborenAm". In diesem Feld ist standardmäßig ein Satz inkl. der Variablen $KonfDatum$ eingefügt.
Durch folgenden Befehl wird die Variable durch Text erstetzt:
rtGeborenAm.RichText := ReplaceText(rtGeborenAm.RichText, '$KonfDatum$', Lernabschnitte['Konferenzdatum']);
In einem zweiten Feld "rTxtGeborenAm" mit gleichem Inhalt ersetze ich die gleiche Variable mit folgendem Befehl:
rTxtGeborenAm.RichText := ReplaceText(rTxtGeborenAm.RichText, '$KonfDatum$', Lernabschnitte['Konferenzdatum']);
Jetzt will ich für mehrere Schüler drucken.
Phänomen bei Feld1: beim ersten Schüler wird die Variable durch das Konferenzdatum ersetzt (wie gewünscht). Bei den weiteren Schülern bleibt trotz unterschiedlichen Konferenzdatum der Wert gleich.
Feld2: da funktioniert es.
Schaue ich mir während der Vorschau den Inhalt der beiden Richtext-Felder an, so steht in Feld1 vor Ausdruck Schüler1 auch "$KonfDatum$" drin, vor Schüler2 aber das Konferenzdatum von Schüler1. Dann kann $KonfDatum$ ja auch nicht ersetzt werden - fehlt ja im Feldinhalt.
Bei Feld2 steht vor dem Ausdruck immer "$KonfDatum$ drin. Also kann es bei jedem Schüler ersetzt werden.
Beide Felder liegen im Detailbereich. Beide haben die gleiche Programmierung (eine Befehlszeile im OnPrint).
Im Anhang liegt der Report. Es wäre nett, falls sich das jemand mal ansehen könnte.
ReplaceText() - Mal funktionier's, mal nicht ...
Moderatoren: Raffenberg, A. Schüller, Pfotenhauer
ReplaceText() - Mal funktionier's, mal nicht ...
- Dateianhänge
-
- 00-Abgangszeugnis, Ver.1.5.7.rtm
- (225.74 KiB) 61-mal heruntergeladen
Viele Grüße
Christian Buchner
Berufskolleg Wirtschaft u. Verwaltung des Kreises Siegen
christian.buchner@berufskolleg-wirtschaft.de
Christian Buchner
Berufskolleg Wirtschaft u. Verwaltung des Kreises Siegen
christian.buchner@berufskolleg-wirtschaft.de
- Raffenberg
- Beiträge: 2564
- Registriert: Dienstag 25. September 2018, 15:22
- Schulform: Gymnasium
- Kontaktdaten:
Re: ReplaceText() - Mal funktionier's, mal nicht ...
Hallo. Auf die Schnelle,
wenn Sie beim ersten Schüler mit ReplaceText einen Text in einem RichtextFeld ändern, so steht beim zweiten Schüler der geänderte Text auch drin. Da beim ersten Schüler der Text schon ersetzt wurde, kann beim zweiten also kein zu ersetzender Text mehr gefunden werden.
Sie können so vorgehen. Speichern sie direkt beim Aufruf den Richtext in einer Variable global zwischen. Wenden Sie nun bei der Zuweisung die ReplaceText Anweisung immer auf diese Variable an.
wenn Sie beim ersten Schüler mit ReplaceText einen Text in einem RichtextFeld ändern, so steht beim zweiten Schüler der geänderte Text auch drin. Da beim ersten Schüler der Text schon ersetzt wurde, kann beim zweiten also kein zu ersetzender Text mehr gefunden werden.
Sie können so vorgehen. Speichern sie direkt beim Aufruf den Richtext in einer Variable global zwischen. Wenden Sie nun bei der Zuweisung die ReplaceText Anweisung immer auf diese Variable an.
Code: Alles auswählen
Var (Global im Hauptbericht)
OriginalRtfText: TppRichtext;
OnCreate (im Hauptbericht)
OriginalRtfText:= TppRichtext.Create (Report);
OriginalRtfText.Richtext := rtGeborenAm.RichText;
OnPrint
rtGeborenAm.RichText := ReplaceText(OriginalRtfText.RichText, '$KonfDatum$', Lernabschnitte['Konferenzdatum']);
Zuletzt geändert von Raffenberg am Dienstag 21. Mai 2019, 21:11, insgesamt 1-mal geändert.
Mit freundlichen Grüßen
Jens Raffenberg
Jens Raffenberg
Re: ReplaceText() - Mal funktionier's, mal nicht ...
Hallo Herr Raffenberg,
vielen Dank für die schnelle Antwort.
Viele Grüße
Chrsitian Buchner
vielen Dank für die schnelle Antwort.
Sie haben völlig Recht. Allerdings erklärt das nicht das (vermeintlich richtige) Verhalten bei Feld2. Aber ich lasse die Sache auf sich beruhen und wende mich der "richtigen" Lösung zu.Raffenberg hat geschrieben: Montag 20. Mai 2019, 11:37 Auf die Schnelle,
wenn Sie beim ersten Schüler mit ReplaceText einen Text in einem RichtextFeld ändern, so steht beim zweiten Schüler der geänderte Text auch drin. Da beim ersten Schüler der Text schon ersetzt wurde, kann beim zweiten also kein zu ersetzender Text mehr gefunden werden.
Viele Grüße
Chrsitian Buchner
Viele Grüße
Christian Buchner
Berufskolleg Wirtschaft u. Verwaltung des Kreises Siegen
christian.buchner@berufskolleg-wirtschaft.de
Christian Buchner
Berufskolleg Wirtschaft u. Verwaltung des Kreises Siegen
christian.buchner@berufskolleg-wirtschaft.de
- Raffenberg
- Beiträge: 2564
- Registriert: Dienstag 25. September 2018, 15:22
- Schulform: Gymnasium
- Kontaktdaten:
Re: ReplaceText() - Mal funktionier's, mal nicht ...
Hallo Herr Buchner,
Sie haben das eine Textfeld als Serienbrief-Textfeld deklariert. Sie erkennen dies an der Eigenschaft "MailMerge" (aktivierter Haken). Diese Eigenschaft wird auch im RichText-Bearbeitungsfenster oben rechts angeboten. Mit aktivem Haken wird das Textfeld erst zur Laufzeit berechnet, ohne dass sein Inhalt überschrieben wird, da die Serienbrieffunktion ebenfalls mit Platzhaltern arbeitet. Mit diesem Trick ist der Umweg über eine Globale-Variable nicht notwendig. Das war mir bis heute auch nicht bewusst, leuchtet aber ein.
Sie haben das eine Textfeld als Serienbrief-Textfeld deklariert. Sie erkennen dies an der Eigenschaft "MailMerge" (aktivierter Haken). Diese Eigenschaft wird auch im RichText-Bearbeitungsfenster oben rechts angeboten. Mit aktivem Haken wird das Textfeld erst zur Laufzeit berechnet, ohne dass sein Inhalt überschrieben wird, da die Serienbrieffunktion ebenfalls mit Platzhaltern arbeitet. Mit diesem Trick ist der Umweg über eine Globale-Variable nicht notwendig. Das war mir bis heute auch nicht bewusst, leuchtet aber ein.
Mit freundlichen Grüßen
Jens Raffenberg
Jens Raffenberg