Formatierten Text in DBRichText einfügen

Alles, was Reporting und Drucken betrifft.
Fehlermeldungen, Fragen usw.
Themen zu einzelnen Formularen bitte im speziellen Forum ...

Moderatoren: Raffenberg, A. Schüller, Pfotenhauer

Antworten
Benutzeravatar
Raffenberg
Beiträge: 2157
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Formatierten Text in DBRichText einfügen

Beitrag von Raffenberg »

Hallo zusammen,
weiß jemand, wie man programmiertechnisch einer DBRichText-Komponente fett formatierten Text voranstellen kann, wenn das Datenbankfeld nicht leer ist?

Also aus:
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus
soll
Einleitung: Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus
werden, sofern Richtext hinterlegt war.
Mit freundlichen Grüßen
Jens Raffenberg
Benutzeravatar
wschrewe
Fachberater*in
Beiträge: 1686
Registriert: Dienstag 25. September 2018, 17:36
Schulform: BK (Pensionär)
Kontaktdaten:

Re: Formatierten Text in DBRichText einfügen

Beitrag von wschrewe »

Raffenberg hat geschrieben: Dienstag 23. Februar 2021, 09:41weiß jemand, wie man programmiertechnisch einer DBRichText-Komponente fett formatierten Text voranstellen kann, wenn das Datenbankfeld nicht leer ist?
Schwierig. Der Text ohne "Einleitung" sieht so aus:
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil MS Sans Serif;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\pard\cf1\f0\fs22 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus\par
}
und mit "Einleitung:"

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}
{\colortbl ;\red0\n0\blue0;}
\viewkind4\uc1\pard\cf1\b\f0\fs22 Einleitung:\b0 \f1 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus\par
}
Es reicht also nicht, den Text einfach voranzustellen, sondern man muss an der richtigen Stelle einfügen. Vermutlich geht das, aber dazu müsste vermutlich eine neue RAP-Funktion eingebaut werden, die formatierten Text in Richtext einfügen kann.
Mit freundlichen Grüßen
Walter Schrewe
"If all else fails, read the instructions" (Donald E. Knuth, letzter TeX - Hilfehinweis)
Benutzeravatar
Raffenberg
Beiträge: 2157
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Re: Formatierten Text in DBRichText einfügen

Beitrag von Raffenberg »

Hallo Herr Schrewe,
meine erste Idee war, den .RichText an eine temporäre Stringvariable zu übergeben, dort mit ReplaceTextEx 'fs22' in einem ersten Versuch gegen 'fs22 Einleitung :' zu tauschen und dann die Stringvariable wieder an das Richtextfeld zu übergeben (so wie in den Serienbriefen). Das will aber nicht klappen.

Momentan stehe ich wie ein Ochse vor dem Berg. Ich würde gerne dem Memofeld Schuelerlaufbahn['ZeugnisBem'] ein 'Zeugnisbemerkungen: ' voranstellen. Weder formatiert noch unformatiert will mir dass beim DBRichtextfeld noch beim DBMemofeld gelingen. Ich habe es auch schon mit zwischenvariablen probiert.
Mit freundlichen Grüßen
Jens Raffenberg
Benutzeravatar
Falko Müller
Fachberater*in
Beiträge: 969
Registriert: Donnerstag 4. Oktober 2018, 20:23
Schulform: Gymnasium

Re: Formatierten Text in DBRichText einfügen

Beitrag von Falko Müller »

Hallo Jens,
beim Memofeld müsste doch die Programmierung aus den Zeugnissen helfen. Das Feld heißt Memo_Bem:

Code: Alles auswählen

procedure DetailBeforePrint;
var 
  BemText: string;
  
begin
  BemText := '';
  
  BemText := Trim(ASVSek_I['Bemerkung Förderschwerpunkt']);
   
  if BemText <> '' then
    begin 
      if Trim(Lernabschnitte['ZeugnisBem']) <> '' then 
        BemText := BemText + Chr(13) + Trim(Lernabschnitte['ZeugnisBem']);
    end 
  else
    BemText := Trim(Lernabschnitte['ZeugnisBem']);
    BemText := 'Zeugnisbemerkung: '+BemText;
  
  Memo_Bem.Text := BemText;

end;
Hab nur die vorletzte Zeile ergänzt. Funktioniert bei mir.
Freundliche Grüße
Falko Müller
Benutzeravatar
Falko Müller
Fachberater*in
Beiträge: 969
Registriert: Donnerstag 4. Oktober 2018, 20:23
Schulform: Gymnasium

Re: Formatierten Text in DBRichText einfügen

Beitrag von Falko Müller »

Beim Richtext ist es mir zumindest gelungen, den Text zu formatieren, mit dem man einen Platzhalter im Richtextfeld ersetzen kann.
Beispiel: im Feld Richtext1 ist ein Platzhalter <hinweis>:

Code: Alles auswählen

Richtext1.RichText := ReplaceText(Richtext1.RichText,'<hinweis>','\b Bemerkung: \b0');
"Bemerkung: " wird dann fett gedruckt, der Rest danach wieder normal.
Weiter Formatierungen findet man z.B. hier:
https://formatting-and-more.de/2016/01/ ... xt-format/

Jetzt musst du nur noch rausfinden, wie man einen Platzhalter in das Richtextfeld reinbekommt...
Zuletzt geändert von Falko Müller am Dienstag 23. Februar 2021, 20:44, insgesamt 1-mal geändert.
Freundliche Grüße
Falko Müller
Benutzeravatar
Falko Müller
Fachberater*in
Beiträge: 969
Registriert: Donnerstag 4. Oktober 2018, 20:23
Schulform: Gymnasium

Re: Formatierten Text in DBRichText einfügen

Beitrag von Falko Müller »

Folgende Programmierung im DetailBeforeGenerate hat bei mir funktioniert:

Code: Alles auswählen

Richtext1.Richtext:=ReplaceText(Richtext1.Richtext,'\fs22','\fs22 \b Zeugnisbemerkung: \b0');
Freundliche Grüße
Falko Müller
Christoph Sprung
Beiträge: 415
Registriert: Montag 3. Dezember 2018, 18:43
Schulform: WbK (a. D.)

Re: Formatierten Text in DBRichText einfügen

Beitrag von Christoph Sprung »

Hallo Herr Raffenberg,
Raffenberg hat geschrieben: Dienstag 23. Februar 2021, 15:01 Ich würde gerne dem Memofeld Schuelerlaufbahn['ZeugnisBem'] ein 'Zeugnisbemerkungen: ' voranstellen.
vielleicht mache ich es mir zu leicht - können Sie nicht einfach im Bearbeitungsmodus eines RichText-Feldes 'Zeugnisbemerkungen: ' hinschreiben und nach Wunsch formatieren, und dahinter per MailMerge das DB-Feld setzen?
Grüße aus Bochum
Christoph Sprung
M. Plümper
Fachberater*in
Beiträge: 699
Registriert: Montag 1. Oktober 2018, 20:30
Schulform: Gymnasium
Kontaktdaten:

Re: Formatierten Text in DBRichText einfügen

Beitrag von M. Plümper »

Hallo Jens,

das geht nicht, weil die DB-RichText-Felder erst nach allen Ereignissen mit dem Text aus der DB gefüllt werden (was sehr blöd ist). Daher kannst du da keinen Text manipulieren. Nur die ungebundenen RichText-Felder erlauben den eingegeben Richtext zu bearbeiten, z. B. so:

Code: Alles auswählen

procedure FreiRichTextOnPrint;

var
  sBezeichnung : string;
  sRichtext : string;
  iPos : integer;

begin
  
  sBezeichnung := '\ul\b Einleitung:\ulnone\b0  ';
  sRichtext := FreiRichText.RichText; 
     
  iPos := Pos('\fs22 ', sRichtext) + 6; 
   
  Insert(sBezeichnung, sRichtext, iPos);
  
  FreiRichText.Richtext := sRichtext;
  
end;
Der Vorschlag von Herrn Sprung funktioniert natürlich mit einem ungebundenen RichText-Feld.
Benutzeravatar
wschrewe
Fachberater*in
Beiträge: 1686
Registriert: Dienstag 25. September 2018, 17:36
Schulform: BK (Pensionär)
Kontaktdaten:

Re: Formatierten Text in DBRichText einfügen

Beitrag von wschrewe »

Sie könnten mal versuchen, ein ungebundenes RichtTextfeld auf dem Formular zu plazieren und da im Ereignis onPrint den folgenden Code ausführen:

Code: Alles auswählen

procedure RichtextfeldOnPrint;
var
  sBezeichnung : string;
  sRichtext : string;
  iPos : integer;
begin
  sRichText:=Schuelerlaufbahn['ZeugnisBem'] ;
  sBezeichnung := '\ul\b Einleitung:\ulnone\b0  ';
  iPos := Pos('\fs22 ', sRichtext) + 6; 
  Insert(sBezeichnung, sRichtext, iPos);
  Richtextfeld.Richtext := sRichtext;
end;
Mit freundlichen Grüßen
Walter Schrewe
"If all else fails, read the instructions" (Donald E. Knuth, letzter TeX - Hilfehinweis)
Benutzeravatar
Raffenberg
Beiträge: 2157
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Re: Formatierten Text in DBRichText einfügen

Beitrag von Raffenberg »

Erst einmal vielen lieben Dank an alle, für die Tipps, die mich weitergebracht haben.

Es ist wirklich kurios, das DBRichText-Felder so sperrig sind, dass man sie nicht mehr manipulieren kann. Selbst Anweisungen im Band 'Zusammenfassung' bleiben wirkungslos, oder das Feld bleibt einfach leer. Danke für den Hinweis, Michael.

Meine Versuche mit den ungebundenen Richtextfeldern liefen schlichtweg ins leere, weil ich \fs20 ersetzen muss, nicht \fs22. Ich habe nicht herausgefunden, ob Text auch mit \fs22 eingeleitet werden könnte und wenn ja, wovon es abhängt, welche Variante verwendet wird. Damit ging es tatsächlich am einfachsten mit dem ReplaceText-Befehl.

Code: Alles auswählen

DBRichText1.RichText := ReplaceText(DBRichText1.RichText, '\fs20','\fs20\b Zeugnisbemerkung: \b0');
Der Insert-Befehl führt nicht zum Ziel, da erwartet wird, dass Text auch mit Sonderzeichen eingefügt wird und somit jedes Sonderzeichen als Textsonderzeichen interpretiert wird. Somit wird aus "\b" im Richtext dann ein '\\b'.

Und letztlich @Herrn Sprung: Manchmal sieht man ja die einfachsten Lösungen vor lauter um die Ecke denken nicht. Klar, damit geht es supereinfach.
Mit freundlichen Grüßen
Jens Raffenberg
Antworten

Zurück zu „Drucken / Reporting“