vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Platzhalter 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Platzhalter in Rtf-Text ersetzen durch Rtf-Text 
Autor: Manfred X
Datum: 01.10.14 10:40

RTF kann sehr komplexe Formatierungen umfassen.
Eventuell hilft Dir die Strukturierung der Inhalte
des abgefragten bzw. zu erstellenden Dokuments als
Objektmodell weiter (C#):

http://www.codeproject.com/Articles/11306/NRTFTree-A-class-library-for-RTF-processing-in-C
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel