vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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
Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) 
Autor: Scrypton
Datum: 08.04.14 22:57

Guten Abend,

ich habe mit Visual Basic erst vor kurzer Zeit angefangen und wollte einen BBCode-Editor umsetzen, welcher die Texteingaben und dessen Formatierung in einer RichEditBox live in einer zweiten, einfachen Textbox im BBCode-Format wiedergibt, während man am Schreiben ist.

Beispiel; aus:
Das [u]ist ein Beispiel.

Wird
Das [u]ist ein Beispiel.
Mein momentaner Stand ist folgender:
Public Class Form1
 
    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button6.Click
        If rtbEdit.SelectionFont IsNot Nothing Then
            Dim currentFont As System.Drawing.Font = rtbEdit.SelectionFont
            Dim newFontStyle As System.Drawing.FontStyle
 
            If rtbEdit.SelectionFont.Bold = True Then
                newFontStyle = FontStyle.Regular
                TextBox1.AppendText("[./b]")
                rtbEdit.Focus()
            Else
                newFontStyle = FontStyle.Bold
                TextBox1.AppendText("[.b]")
                rtbEdit.Focus()
            End If
 
            rtbEdit.SelectionFont = New Font( _
               currentFont.FontFamily, _
               currentFont.Size, _
               newFontStyle _
            )
        End If
    End Sub
 
 
End Class
Wird der Button betätigt, wird in der RichEditBox die Schrift auf Bold gestellt und in der TextBox erscheint [.b], bei zweiter betätigung wird Bold deaktiviert und in der TextBox erscheint [./b].

Wie jedoch bringe ich die Texteingaben in die TextBox?
Ein "TextBox1.Text = rtbEdit.Text" bringt mir nichts, da dann bei jeder Änderung der Formatierung die vorhergehenden BBCodes verscheinden.

Kann mir einer helfen, wie man da am besten ansetzen sollte?


Danke und liebe Grüße,
Scry

Beitrag wurde zuletzt am 08.04.14 um 22:59:21 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) 
Autor: Manfred X
Datum: 09.04.14 09:18

Hallo!

Du mußt - bei jeder Änderung in der RTF-Box - die BB-Codes zu den
entsprechenden RTF-Codes im RTF-Text ermitteln und sie an der korrekten
Stelle im unformatierten Text einfügen.







Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) 
Autor: Scrypton
Datum: 09.04.14 13:55

Hallo Manfred,

wie ist in dem RTF-Text der RTF-Code zu ermitteln?
Also; wie ermittle ich, wann die Schrift farbig bzw. auf Bold gesetzt ist?

Und: Wie füge ich in einem Text an einer bestimmten Position einen weiteren Inhalt ein?


Liebe Grüße,
Scry
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) 
Autor: Manfred X
Datum: 09.04.14 14:11

Hallo!

[B]Das ist keine triviale Aufgabe.[/B]

Am besten Du suchst im Netz, ob es bereits einen Konverter für
einen Subset der RTF-Codes in BBCode gibt.

Ansonsten mußt Du Dir die RTF-Codes anschauen:
http://www.biblioscape.com/rtf15_spec.htm

Da RTF ASCII-Text mit Attributen ist, kannst Du ihn
auf eine String-Variable zuweisen und sukzessive mit einer
IndexOf-Überladung ab einem Startindex nach der Position der Tags suchen.

Zum Einfügen der korrespondierenden BBCodes würde ich einen StringBuilder verwenden,
der den reinen Text enthält (Insert-Methode).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) 
Autor: Scrypton
Datum: 09.04.14 15:18

Hallo Manfred,

danke für deine Antworten.
Einen Konverter habe ich auf die Schnelle nicht gefunden, kann aber ohnehin erst heute Abend wieder weiter machen wenn ich zuhause bin. Momentan stecke ich noch in der Arbeit fest.

Mit welcher Funktion ich den Text nach RTF-Codes durchsuche ist mir noch immer nicht klar.
Bold wird z.B. mit \b aktiviert und wieder deaktiviert mit \b0

Ich weiß jedoch nicht, wie ich wo danach suchen/selektieren kann.


Liebe Grüße,
Scry
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) 
Autor: Manfred X
Datum: 10.04.14 11:52

Die Konvertierung ist einfacher, wenn Du den umgekehrten Weg gehst,
also die BBCode-Textattribute in eine Textbox eingibst und sie in
einer RTF-Box entsprechend anzeigen läßt.

Als kleines Beispiel habe ich das für die Fontstyle-Attribute
Fett, Kursiv, Unterstreichen und Durchstreichen programmiert.
Public Class frmBBCode
 
    Dim tbo As New TextBox With _
         {.Parent = Me, .Width = 300, .Height = 300, .Multiline = True}
 
    Dim WithEvents btnConvert As New Button With _
         {.Parent = Me, .Width = 100, .Height = 30, .Top = 330, _
          .Text = "Konvertieren"}
 
    Dim rbo As New RichTextBox With _
         {.Parent = Me, .Width = 300, .Height = 300, .Top = 380}
 
 
    Private Sub frmBBCode_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Me.MinimumSize = New Size(350, 700)
    End Sub
 
 
    Private Sub btnConvert_Click(sender As Object, _
        e As System.EventArgs) Handles btnConvert.Click
 
        Dim attributes As String = "bius"
 
        Dim area As Point = Nothing, startindex As Integer
        Dim fs As FontStyle
 
        With rbo
            .Text = tbo.Text
 
            'Schleife über die unterstützten Attribute
            For i As Integer = 0 To attributes.Length - 1
                startindex = 0
                Do
                    'Suche nach nächstem Text-Bereich den das Attribut 
                    ' umschließt 
                    area = FindArea(.Text, startindex, attributes(i))
                    If Not area = Nothing Then
                        'BBCode aus dem RichText entfernen
                        .SelectionStart = area.X
                        .SelectionLength = 3
                        .SelectedText = ""
 
                        .SelectionStart = area.X + area.Y - 4
                        .SelectionLength = 4
                        .SelectedText = ""
 
                        'zeichenweise das FontStyle-Attribut einfügen
                        For k As Integer = area.X To area.X + area.Y - 5
                            .SelectionStart = k
                            .SelectionLength = 1
                            fs = .SelectionFont.Style
                            Select Case attributes(i)
                                Case Is = "b"c
                                    fs = fs Or FontStyle.Bold
                                Case Is = "i"c
                                    fs = fs Or FontStyle.Italic
                                Case Is = "u"c
                                    fs = fs Or FontStyle.Underline
                                Case Is = "s"c
                                    fs = fs Or FontStyle.Strikeout
                            End Select
                            .SelectionFont = New Font(.Font.Name, .Font.Size, _
                              fs)
                        Next k
                        startindex = area.X + area.Y
                    End If
                Loop While Not area = Nothing And startindex < .Text.Length
            Next i
        End With
 
    End Sub
 
 
 
    Private Function FindArea(ByVal text As String, _
                              ByVal startindex As Integer, _
                              ByVal Attribute As String) As Point
 
        Dim start, ende As Integer
        Try
            start = text.ToLower.IndexOf("[" & Attribute & "]", startindex)
            If start = -1 Then Return Nothing
            ende = text.ToLower.IndexOf("[/" & Attribute & "]", start + 2)
            If ende = -1 Then Return Nothing
            Return New Point(start, ende - start + 1)
        Catch
            Return Nothing
        End Try
    End Function
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) 
Autor: Manfred X
Datum: 10.04.14 12:54

Sorry. Eine Zeile muß geändert werden, nämlich so:
   startindex = area.X + area.Y - 7
(Die bearbeiteten Tags sind entfernt worden.)
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