| |
VB.NET - Ein- und UmsteigerPlatzhalter in Rtf-Text ersetzen durch Rtf-Text | | | Autor: spatzimatzi | Datum: 30.09.14 21:04 |
| Hallo,
brauche mal wieder Hilfe.
Habe in einer RichTextBox unterschiedliche Platzhalter bzw. Variablen.
Das sieht so aus: Das ist der Platzhalter <<Platzhalter>> für eine Beschreibung
Dieser Platzhalter soll durch REPLACE in einen Text umgewandelt werden.
Ist es PlainText aus einer TextBox, so gehen mir die Zeilenumbrüche verloren. Schade drum!
Jetzt habe ich jedoch keinen Plain-Text, sondern Rtf-Text, der in einer DB gespeichert ist.
Wird mein Plathalter durch diesen Rtf-Text, mit all den Steuercodes ersetzt, geht die komplette Formatierung über den Jordan.
Die Umsetzung mit REPLACE erfolgt mit TSQL
Meine Frage:
Gibt es eine Möglichkeit den Rtf-Text in Plain-Text zu konvertieren.
Der Idealfall wäre natürlich, dass die Steuercodes innerhalb des Textes, wie Zeilenumbruch oder Farbe, erhalten bleiben.
Evtl. ist dieser Beitrag besser aufgehoben in einem SQL-Forum.
Aber aus Erfahrung weiss ich, das in diesem Forum sehr viel Wissen steckt.
Viele Grüße
spatzimatzi | |
Re: Platzhalter in Rtf-Text ersetzen durch Rtf-Text | | | Autor: Kuno60 | Datum: 30.09.14 23:04 |
| spatzimatzi schrieb:
Zitat: | | Meine Frage:
Gibt es eine Möglichkeit den Rtf-Text in Plain-Text zu
konvertieren.
Der Idealfall wäre natürlich, dass die Steuercodes innerhalb
des Textes, wie Zeilenumbruch oder Farbe, erhalten bleiben. | |
Hallo,
Rtf-Text in Plain-Text umzuwandeln geht am einfachsten mit einer RichTextBox.
Dim rtbox As New RichTextBox
rtbox.Rtf = "Rtf-Text"
Dim plain = rtbox.Text Zeilenumbrüche bleiben dabei erhalten, alle anderen Steuercodes (Farbe, Font usw.) gehen natürlich verloren, denn sonst ist es auch kein Plain-Text mehr. | |
Re: Platzhalter in Rtf-Text ersetzen durch Rtf-Text | | | Autor: spatzimatzi | Datum: 01.10.14 07:00 |
| Hallo Kuno60
vielen Dank für die Info. Klappt wunderbar!
Leider muss die Umwandlung auf der Datenbankseite geschehen.
Somit müsste dies mit Hilfe von T-SQL geschehen.
Gibt es dazu fertige Functions?
Mal eine naive Idee:
Wenn man erkennen kann, wo der eigentliche Text anfängt, also das Überlesen der anfänglichen Steuercodes, dann bräuchte man nur noch am Ende die runde schließende Klammer entfernen.
Ist es nicht möglich, beim Erfassen des Textes in der RichTextBox zunächst unsichtbare Zeichen (die nicht als Steuercode fungieren) mit Hilfe von VB.NET einzufügen und die der Anwender nicht sieht und dann erst den eigentlichen Text zu schreiben. Damit hätte man dann einen eindeutige Beginn des eigentlichen Textes. Welche Zeichen könnten das sein?
Gruß
spatzimatz | |
Re: Platzhalter in Rtf-Text ersetzen durch Rtf-Text | | | Autor: spatzimatzi | Datum: 01.10.14 14:33 |
| Hallo Manfred X,
dass die Steuerung in einem Rtf-String sehr komplex sein kann, kann ich mir vorstellen.
Mir würde es schon reichen, wenn bei einer Überarbeitung nur das Steuerzeichen \par (Zeilenumbruch) stehen bleiben würde.
Möchte nochmals meine Idee vorstellen.
Möchte in einer RichTextBox eine Art Anschreiben erstellen.
In diesem Anschreiben soll nicht nur das übliche BlaBla stehen, sondern auch Informationen zu einem Projekt. Da sich diese Projekt-Infos häufig ändern werden, soll nicht ein fixer Zustand eingetragen werden, sondern es wird ein Platzhalter eingefügt und zum Zeitpunkt des Ausdruckes ersetzt durch die eigentliche Information
Das könnte so aussehen:
Sehr geehrte Damen und Herren,
zum Stand des Projektes kann ich Ihnen folgende Info geben:
<<PJ_Beschreibung>>
Mit freundlichen Grüßen
Im Moment wird die Projekt-Beschreibung in einer TextBox hinterlegt.
Der Platzhalter <<PJ_Beschreibung>> wird direkt vor dem Drucken durch den Text aus der TextBox ersetzt. Wurde der Platzhalter formatiert (z.B. Bold), so geht diese Formatierung auch auf den Text über.
Der Text wird somit komplett bold dargestellt.
Mögliche Zeilenumbrüche im PlainText werden konvertiert in \par (Zeilenumbruch in Rtf_Format)
Das klappt auch sehr gut.
Jetzt soll für die Beschreibung des Projektes eine RichTextBox eingesetzt werden.
Der Text einschließlich der vielen Steuerzeichen werden in die DB geschrieben
Wird jetzt der Platzhalter durch die Beschreibung ersetzt, habe ich Rtf-Text in Rtf-Text. Die Formatierung bricht komplett zusammen und es wird der Text incl. der Steuerzeichen ausgedruckt.
Wo liegt das Problem:
Ich kann leider nicht eindeutig feststellen, wo die eigentliche Beschreibung beginnt. Wäre dies möglich, könnte ich den vorderen Teil (nur Steuercodes) und natürlich auch das Ende des Rtf-Stringes (das ist einfach) löschen.
Dann würde ich alle Steuerzeichen außer \par ebenso entfernen und schon hätte ich den Zustand wie mit dem PlainText bzw. TextBox.
Wo beginnt der eigentliche Text?? Das ist wichtig!!
Dann kam mir die Idee mit den zusätzlichen Informationen:
Wenn ich bestimmte Kennungen (unsichtbar für den Anwender) vor den eigentlichen Text setzen könnte, dann hätte ich automatisch den Anfang des Textes und könnte alle davor stehenden Steuerzeichen löschen.
Ist meine Idee eigentlich praktikabel?
Verenne ich mich hier?
Kann man das auf eine andere Art und Weise lösen?
Würd mich freuen, wenn ihr eine Lösung hättet. Oder auch nur einen Ansatz.
Hinweis: Leider muss das Konvertieren auf der MSSQL-Seite durchgeführt werden
Gruß
spatzimatzi
| |
Re: Platzhalter in Rtf-Text ersetzen durch Rtf-Text | | | Autor: Manfred X | Datum: 02.10.14 08:40 |
| So ganz verstehe ich das Problem nicht.
Ich habe mal einen RTF-Text eingefügt.
Die Formatierungen bleiben erhalten.
Public Class frmRTF_Insert
Dim rtb As New RichTextBox With _
{.Parent = Me, .Width = 300, .Height = 300}
Private Sub frmRTF_Insert_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Const placeholder As String = "<<Platzhalter>>"
'Text des Dokument erstellen
rtb.Text = "Projektnr. 1234567" & vbCrLf & _
"Einstufung: sehr wichtig - streng vertraulich" & vbCrLf & vbCrLf & _
placeholder & vbCrLf & _
"Für Rückfragen steht Ihnen jederzeit spatzimatzi zur Verfügung"
SetColor("wichtig", Color.Red)
SetColor("vertraulich", Color.Red)
setfont("1234567", New Font("Arial", 12, FontStyle.Bold))
setfont("spatzimatzi", New Font("Arial", 12, FontStyle.Underline))
'Abfragen des Dokuments als String
Dim rtfdoc As String = rtb.Rtf
'Einzufügender Text
rtb.Text = "Das Projekt wird wegen eines RTF-Problems" & vbCrLf & _
"nicht rechtzeitig abgeschlossen werden können"
SetColor("nicht rechtzeitig", Color.Blue)
setfont("RTF-Problems", _
New Font(rtb.Font.Name, rtb.Font.Size, FontStyle.Underline Or _
FontStyle.Bold))
'Abfrage des einzufügenden Textes als String
Dim rtfinsert As String = rtb.Rtf
'Text einfügen
rtfdoc = rtfdoc.Replace(placeholder, rtfinsert)
'Dokument incl Einfügung anzeigen
rtb.Rtf = rtfdoc
End Sub
Private Sub SetColor(ByVal text As String, col As Color)
With rtb
.SelectionStart = rtb.Find(text)
.SelectionLength = text.Length
.SelectionColor = col
.SelectionLength = 0
End With
End Sub
Private Sub setfont(ByVal text As String, ByVal fnt As Font)
With rtb
.SelectionStart = rtb.Find(text)
.SelectionLength = text.Length
.SelectionFont = fnt
.SelectionLength = 0
End With
End Sub
End Class | |
Re: Platzhalter in Rtf-Text ersetzen durch Rtf-Text | | | Autor: spatzimatzi | Datum: 06.10.14 13:31 |
| Hallo Manfred X,
leider kann ich erst jetzt auf Deine Ausführungen antworten.
Ja, ich habe mir das Programm heruntergeladen und ausprobiert. Funktioniert einwandfrei.
Was nicht sofort ersichtlich ist, ist die Tatsache, das das RTB bei der letzten Zuweisung
'Dokument incl Einfügung anzeigen
rtb.Rtf = rtfdoc
eine automatische Umformatierung durchführt.
Aus dem Text mit den (ich will es mal so nennen) 2 Rtf-Köpfen wird ein Text, wie die Spec es vorschreibt.
Da ich jedoch auf der DB-Seite diese Umformatierung nicht automatisch durchführen kann, bleibt mein Problem erhalten. Es läßt sich wohl mit SQL nicht so einfach lösen.
Gruss
spatzimatzi | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|