vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · TextBox & RichTextBox   |   VB-Versionen: VB2010 - VB201520.11.17
Erzeugen und Formatieren eines RTF-Textes aus "normalen" Texten/Strings

Dieser Tipp zeigt eine Vorgehensweise zur Erzeugung von RTF-Text mit Hilfe einer speziellen Funktion

Autor:   Dietrich HerrmannBewertung:  Views:  8.852 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein Beispielprojekt 

Mit Anwendung von VB-Code wird in diesem Tipp vermittelt, wie unter Verwendung einer speziellen Funktion und einer besonderen Vorgehensweise, formatierte, auf Variablen beruhende RTF-Texte erzeugt werden können.

Vorgehensweise:
Man definiert ein String-Array:

Dim tx(3) As String ' (4 Strings können definiert werden)

D.h. der RTF-Text wird aus diesen Einzelstrings zusammengesetzt, nachdem Formatierungen vorgenommen wurden.

An gewünschter Stelle im Programm erzeugt man die Strings für das Array. Dabei können einfache Texte aber auch Variable als Strings vereinbart werden. Das Array-Element muss allerdings dem folgenden vorgegebenen Aufbau entsprechen:

"Text; SelectionBackcolor; SelectionColor; SelectionFont"
  • Text: der zu formatierende Text
  • SelectionBackcolor: Hintergrundfarbe für den Text
  • SelectionColor: Farbe für den Text
  • SelectionFont: Schriftart für den Text

Anmerkung: die Begriffe stammen aus der Programmierung für RTF

Alle diese Parameter werden durch ; getrennt. Der Parameter SelectionFont dient dem definieren des Fonts für den Text:

"FontFamily, FontSize, FontStyle"

Es sind gewissermaßen Parameter für den Parameter SelectionFont und werden mit , voneinander getrennt.

Davon ausgehend kann man nun bspw. folgendes String-Feld programmieren:

tx(0) = UCase("meinname") & vbCrLf & ";Red;Black;Arial,12,Bold"
tx(1) = "Vorname" & vbCrLf & ";;Black;Arial,10,Regular" & vbCrLf
tx(2) = " hat heute, am " & Now.ToString & ";Red;Yellow;Times New Roman,16,Italic"
tx(3) = "Geburtstag!;;Black;Arial,10,Regular"

Auf diese Art können auch sämtliche Variablen für RTF formatiert werden. Jetzt kann der Aufruf der Funktion createRTFtext erfolgen mit:

Dim tRTF as String = createRTFtext(tx, bgColor)

mit bgColor als die allgemeine Hintergrundfarbe eines RTF-Controls, üblicherweise einer RichTextBox.

Dann nur noch den RTF-Text in die RichTextBox einfüllen: RichTextBox1.RTF = tRTF

Hier nun die zugehörige Funktion:

''' <summary>
'''   RTF-Text mit Formatierungen erstellen
''' </summary>
''' <param name="tFeld">das Feld einzelner, zu formatierender Texte</param>
''' <param name="defBGColor">die Hintergrundfarbe, default</param>
''' <returns>der formatierte RTF-Text</returns>
Public Function createRTFtext(tFeld() As String,
  Optional defBGColor As Color = Nothing) As String
 
  ' Aufbau eines Feld-Elements der Texte
  ' Definition: text,selectionback,selectionfor,selectionfont
  ' Beispiel für Feld-Element: "Hallo Welt;Black;White;Arial,12,Regular"
 
  Dim rtt As New RichTextBox
  Dim sp(), spf(), t As String
  Dim cb, cf As Color
  Dim fo As Font, fs As FontStyle
 
  ' das Array verarbeiten
  For i As Short = 0 To tFeld.Length - 1
    If IsNothing(tFeld(i)) Then Continue For
    ' Feldelement splitten
    sp = Split(tFeld(i), ";")
    ' gesplittetes Element verarbeiten
    For j As Short = 0 To sp.Length - 1
      Select Case j
        Case 0   ' der Text
          t = sp(0)
 
        Case 1   ' SelectionBackColor
          If IsNothing(defBGColor) OrElse sp(1) <> "" Then
            cb = Color.FromName(sp(1))
          ElseIf Not IsNothing(defBGColor) And sp(1) = "" Then
            cb = defBGColor
          End If
 
        Case 2   ' SelectionColor
          cf = Color.FromName(sp(2))
 
        Case 3   ' der Font
          ' splitten der Font-Parameter 
          spf = Split(sp(3), ",")
          ' festlegen des FontStyles
          Select Case spf(2)
            Case "Regular" : fs = FontStyle.Regular
            Case "Bold" : fs = FontStyle.Bold
            Case "Italic" : fs = FontStyle.Italic
            Case "Underline" : fs = FontStyle.Underline
          End Select
          ' den Font definieren
          fo = New Font(spf(0), CShort(spf(1)), fs)
      End Select
    Next 
 
    ' den RTF-Text in einer RTF-Textbox erzeugen
    With rtt
      If Not IsNothing(cb) Then .SelectionBackColor = cb
      If Not IsNothing(cf) Then .SelectionColor = cf
      If Not IsNothing(fo) Then .SelectionFont = fo
      .AppendText(t)
    End With
    cb = Nothing : cf = Nothing : fo = Nothing
  Next 
 
  ' Rückgabe des RTF-Textes
  Return rtt.Rtf
 End Function



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.