RichText :: voller Zugriff auf Inhalt

bruZard

Grünschnabel
Ich versuche innerhalb einer RichText-Box Syntaxhighlighting zu realisieren. Dazu hatte ich mehrere Ansätze, die aber alle nicht funktionieren. Zum Beispiel versuchte ich die Funktion InStr() dazu zu verwenden, aber im Gegensatz zu anderen Dialekten gibt mir diese Funktion nur zurück ob der gesuchte String gefunden wurde, nicht aber dessen Position im String.

Kennt vielleicht jemand eine Möglichkeit einen String innerhalb eines Strings zu finden und gleichzeitig seine Pos. zu erfahren?

P.S.: Ich teile .Text mit Split auf um den Inhalt der RichText in einzelne Zeilen zu zerlegen.
 
natürlich gibt dir die instr-funktion die position des ersten zeichens vom suchtext zurück. wenn der suchstring nicht gefunden wurde, gibt die funktion 0 zurück.
 
Du hast Recht, dennoch funzt es irgendwie nicht. Ich kenne zwar die Methoden, verstehe aber nicht deren Anwendung. Hier mal ein Beispiel mit einem festen String:
Code:
Private Sub RichTextBox1_Change()
    Dim pos As Long
    With RichTextBox1
        pos = InStr(.Text, "Hallo")
        If pos Then
            .SelStart = pos - 1
            .SelLength = pos + 5
            .SelColor = vbRed
            .SelText = "Hallo"
        Else
            .SelColor = vbBlack
        End If
    End With
End Sub

Es funktioniert einfach nicht. Wie kann ich erreichen daß nur das Wort "Hallo" eingefärbt wird, der restliche Text aber unberührt bleibt und ich normal weiterschreiben kann?
 
eine andere möglichkeit wäre, dass du dich einfach mal mit dem aufbau der rtf-steuerzeichen auseinandersetzt. dann kannst du evtl. jedes vorkommen deines schlüsselwortes mit der replace-funktion anhand der steuerzeichen formatieren.
 
ich hab mir das gerade noch mal etwas durch den kopf gehen lassen und dabei ist noch folgender code rausgekommen. ist keine besonders tolle lösung, aber vielleicht hilft es dir ja etwas weiter:
Code:
Dim nPos As Long
Dim nStart As Long

nPos = rtf.Find("Hallo", nStart)
Do While nPos >= 0
    If rtf.SelLength > 0 Then
        rtf.SelBold = True
        rtf.SelStart = Len(rtf.Text)
        nPos = rtf.Find("Hallo", nPos + 5)
    Else
        rtf.SelBold = False
    End If
Loop
rtf.SelBold = False
 
bei mir funktioniert das, es sind allerdings noch ein paar kleine schönheitsfehler drin. aber es soll auch keine musterlösung sein, sondern ein denkanstoss.
 
Du hattest Recht, es funktioniert sehr gut.

Allerdings denke ich daß es dennoch der falsche Ansatz ist. Einserseits durch die Tatsache daß ständig der gesamte Text durchsucht werden muß, andererseits weil man kaum Kontrolle über das Geschehen hat.
Ich will es nun so versuchen, daß ich einen zzweiten String "mitschleppe" in den ich den geparsten Text packe. Nur will mir kein vernünftiger Ansatz dafür einfallen ... vielleicht jemand eine Idee?
Ich will während der Eingabe des Textes Schlüsselwörter farbig darstellen, nach bestimmten Kombinationen von Schlüsselwörtern den Text einrücken, Tabs soll auch in der nächsten Zeile erhalten bleiben und ich will die Länge der Tabs ständig kontrollieren können ... *phew* ... starker Tobak
 

Neue Beiträge

Zurück