Problem mit Syntax Highlighting

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

    Problem mit Syntax Highlighting

    Hi,
    ich hab ein kleines Problem mit Syntax Highlighting in einer RichTextBox.
    Und zwar benutze ich folgende Klasse: pietschsoft.com/post/2005/05/V…-RichTextBox-control.aspx
    Mein bisheriger Code sieht so aus:

    VB.NET-Quellcode

    1. Dim rtb_Main As New SyntaxRTB
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. With rtb_Main
    4. .Dock = DockStyle.Fill
    5. .CaseSensitive = False
    6. End With
    7. Me.Controls.Add(rtb_Main)
    8. End Sub
    Nun habe ich ein Problem. Die Klasse habe ich ein wenig abgeändert:

    VB.NET-Quellcode

    1. arrKeyWords = New String() {"dim", "and", "or", "for", "each", "end", "next", "loop", "while", "until", "if", "then", "sub", "private", "set", "get", "in", "integer", "boolean", "string", "public", "function", "property", "as", "msgbox"}
    Das funktioniert sehr gut, nur leider gibt es doch ein kleines Problem:
    Wenn ich in der RichTextBox z.B. MsgBox ("hallo") schreibe funktioniert alles. Schreibe ich jedoch MsgBox("hallo") (ohne Leerzeichen zwischen MsgBox und der Klammer) wird 'MsgBox' nicht _gehighlightet_ das gleiche mit z.B. ByVal direkt neben einer Klammer. Wie kann ich das lösen?
    Das Problem ist

    Line = Split(Me.Lines(LineIndex).ToString, " ")

    in dem Code des Autors. Damit trennt er den kompletten Text an den Leerzeichen. Wenn du jetzt zb als Wort "Byval" eingegeben hast, erkennt er "Byval(" nicht. Kannst du aber ja vll abändern.
    Danke für den Tipp :)
    Habe es nun so probiert:

    VB.NET-Quellcode

    1. Line = Split(Me.Lines(LineIndex).ToString, "")
    Jedoch funktionierte es auch nicht.
    Gibt es nicht eine Möglichkeit, dass neben ( ) { } , usw. trotzdem gehighlightet wird?
    Du kannst ein fertiges Syntax-Hightlighting-Element nutzen.
    FireballFX kannst du dir mal anschauen.
    Ich bin ganz zufrieden damit. Du kannst verschiedene Highlights angebe. Also Kommentare, Befehle, Strings, Zahlen... Da kannst du für jedes die Schriftfarbe, -größe usw. festlegen.
    Wenn du es drucken willst, hat das Element eine eigene Druckfunktion....
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Keine Ahnung, musst mal suchen.
    Kann es dir kurz im groben erklären.

    Um eine eigene Sprache bearbeiten, brauchst du die Source. Die gibts hier
    Die Sprachdateien liegen im Ordner "src\Fireball.CodeEditor.SyntaxFiles\Syns" Dort kannst du entweder eine bearbeiten oder eine neue hinzufügen.
    Zum bearbeiten (vermutlich leichter): eine der *.Syn-Dateien z.B. mit dem Editor öffnen.
    Dort kannst du in die Verschiedenen Blöcke deine Syntax eintragen. Z.B Bei Keywords kannst du dann Sub, ByVal, Private, Public usw schreiben. Ganz unten kannst du danach die Formatierung für diese Keywords ändern.
    Das ganze Speichern.

    Das muss nun wieder Kompiliert werden. Das geht mit der der build.sln im "src\build"-Ordner. Das musst du aber mit C# geöffnet werden. Dann das Projekt kompilieren. Dabei müsstest du dann 4527 Warnungen bekommen. Also nicht erschrecken :D

    Die Dateien findest du im Ordner: "bin\release\Fireball.CodeEditor.SyntaxFiles" Alle dll's werden benötigt.

    Diese in dein Projekt verweisen und die Fireball.CodeEditor.dll in die Toolbox ziehen. Dann kannst du auf der Form eine CodeEditorControll erstellen.
    Die Syntax des Elementes kannst du so ändern:

    VB.NET-Quellcode

    1. CodeEditorSyntaxLoader.SetSyntax(Me.CodeEditorControlHaupt, Fireball.CodeEditor.SyntaxFiles.SyntaxLanguage.Lang6502)

    Da musst du dann eben das Lang6502 anpassen auf die Sprache die du geändert hast.

    Text kannst so einfügen:

    VB.NET-Quellcode

    1. CodeEditorControlHaupt.Document.Text = "Hallo"

    Das geht also über das Document.Text....
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Vielen Dank für deine Erklärung :)
    Ich werde es mal ausprobieren.

    Edit:
    Ich denke, das ist mir doch ein wenig zu kompliziert...
    Vielleicht gibt es bei der SyntaxRTB (siehe erster Post)-Klasse eine Möglichkeit, dass egal ist, welches Zeichen neben dem zu highlightenden Text steht?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „haiyyu“ ()

    VB.NET-Quellcode

    1. Private Sub Hilight(ByVal Wort As String, ByVal Farbe As Color)
    2. Dim Index As Integer = RichTextBox1.Text.IndexOf(Wort)
    3. Dim alt As Integer = RichTextBox1.SelectionStart
    4. Do Until Index = -1
    5. RichTextBox1.SelectionStart = Index
    6. RichTextBox1.SelectionLength = Wort.Length
    7. RichTextBox1.SelectionColor = Farbe
    8. Index = RichTextBox1.Text.IndexOf(Wort, Index + 1)
    9. Loop
    10. RichTextBox1.SelectionStart = alt
    11. RichTextBox1.SelectionColor = Color.Black
    12. End Sub


    So kann man die Farbe einstellen ;)