Seite 1 von 1
Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 09:41
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.
Re: Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 12:17
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.
Re: Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 15:01
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.
Re: Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 16:26
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.
Re: Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 16:34
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...
Re: Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 20:44
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');
Re: Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 21:04
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?
Re: Formatierten Text in DBRichText einfügen
Verfasst: Dienstag 23. Februar 2021, 22:42
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.
Re: Formatierten Text in DBRichText einfügen
Verfasst: Mittwoch 24. Februar 2021, 00:30
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;
Re: Formatierten Text in DBRichText einfügen
Verfasst: Mittwoch 24. Februar 2021, 12:56
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.