Avatar billede stry Nybegynder
11. april 2004 - 15:50 Der er 13 kommentarer og
1 løsning

Syntax farvning i richtextbox

Er der nogen der har en god idé til hvordan jeg kan lave syntax farvning i en richtextbox, altså sådan at det kommer til at ligne VBA-editoren.
Jeg forestiller mig noget med at man har en referencefil med VB-ord og så evaluerer man det indtastede op i mod denne fil, men hvordan skal det gøres?

På forhånd tak :-)
Avatar billede stry Nybegynder
12. april 2004 - 10:13 #1
Prøver med lidt flere point :-)
Avatar billede stry Nybegynder
12. april 2004 - 10:56 #2
Og jeg HAR prøvet med CodeMax (http://www.eksperten.dk/spm/233860), men kan ikke få det til at virke (og jeg vil egentlig også hellere lave det selv).
Avatar billede the_master Nybegynder
12. april 2004 - 16:03 #3
vil du farve tesktsten eller selve richtextboxen
Avatar billede stry Nybegynder
12. april 2004 - 16:05 #4
Farve teksten ligesom VBA-editoren.
Avatar billede the_master Nybegynder
12. april 2004 - 16:09 #5
her er noget jeg håber du an bruge det

Dim search&
Public Function ColorWord(RTF As RichTextBox, Swords As String, Scolor As ColorConstants, _
SFontsize As Integer, Sbold As Boolean, Sitalic As Boolean, Sbullet As Boolean)
search = 1
Do Until search = 0
search = InStr(search, RTF.Text, Swords, vbTextCompare)
If search > 0 Then
With RTF
          .SelStart = search - 1
          .SelLength = Len(Swords)
          .SelColor = Scolor
          .SelFontSize = SFontsize
          .SelBold = Sbold
          .SelItalic = Sitalic
          .SelBullet = Sbullet
End With
search = search + Len(Swords)
End If
Loop
With RTF
          .SelStart = Len(RTF.Text)
          .SelColor = vbBlack
          .SelFontSize = 8
          .SelBold = False
          .SelItalic = False
          .SelBullet = False
End With
End Function

'********CALL THE FUNCTION FROM YOUR FORM LIKE THIS********

ColorWord rtb, "blue", vbBlue, 10, True, False, False

***********************************************************
Avatar billede stry Nybegynder
12. april 2004 - 16:11 #6
Jeg kigger på det og vender tilbage :-)
Avatar billede the_master Nybegynder
12. april 2004 - 16:12 #7
ok her er en anden måde:

Private Sub ColorTags(rch As RichTextBox)
Dim txt As String
Dim tag_open As Integer
Dim tag_close As Integer

    txt = rch.Text
    tag_close = 1
    Do
        ' See where the next tag starts.
        tag_open = InStr(tag_close, txt, "<")
        If tag_open = 0 Then Exit Do
       
        ' See where the tag ends.
        tag_close = InStr(tag_open, txt, ">")
        If tag_open = 0 Then tag_close = Len(txt)
       
        ' Color the tag.
        rch.SelStart = tag_open - 1
        rch.SelLength = tag_close - tag_open + 1
        rch.SelColor = vbRed
    Loop
End Sub
Avatar billede stry Nybegynder
12. april 2004 - 17:10 #8
>>the_master
Den første er da noget i den rigtige retning, meeen der er stadig en del problemer, f.eks. tager den også og farver DELE af et ord hvis det matcher et ord i ref.-filen.

Og det skal jo også være sådan at ord omsluttet af "-tegn ikke farves ligesom at kommentarer skal behandles særskilt (farves grønne).

Er der nogen der kan hjælpe med de problemer?
Avatar billede the_master Nybegynder
12. april 2004 - 17:21 #9
ja ja ja, så har du jo noget at lave!
jeg skal nok kigger på det
Avatar billede the_master Nybegynder
12. april 2004 - 17:47 #10
Option Explicit

      Private Sub Command1_Click()
        HighlightWords RichTextBox1, "text", vbRed
      End Sub

      Private Function HighlightWords(rtb As RichTextBox, _
                                  sFindString As String, _
                                  lColor As Long) _
                                  As Integer

        Dim lFoundPos As Long          'Position of first character
                                        'of match
        Dim lFindLength As Long        'Length of string to find
        Dim lOriginalSelStart As Long
        Dim lOriginalSelLength As Long
        Dim iMatchCount As Integer      'Number of matches

        'Save the insertion points current location and length
        lOriginalSelStart = rtb.SelStart
        lOriginalSelLength = rtb.SelLength

        'Cache the length of the string to find
        lFindLength = Len(sFindString)

        'Attempt to find the first match
        lFoundPos = rtb.Find(sFindString, 0, , rtfNoHighlight)
        While lFoundPos > 0
          iMatchCount = iMatchCount + 1

          rtb.SelStart = lFoundPos
          'The SelLength property is set to 0 as
          'soon as you change SelStart
          rtb.SelLength = lFindLength
          rtb.SelColor = lColor

          'Attempt to find the next match
          lFoundPos = rtb.Find(sFindString, _
            lFoundPos + lFindLength, , rtfNoHighlight)
        Wend

        'Restore the insertion point to its original
        'location and length
        rtb.SelStart = lOriginalSelStart
        rtb.SelLength = lOriginalSelLength

        'Return the number of matches
        HighlightWords = iMatchCount

      End Function
Avatar billede stry Nybegynder
12. april 2004 - 18:59 #11
Den sidste medtager også dele af ord :-(
Avatar billede stry Nybegynder
12. april 2004 - 19:02 #12
Altså hvis jeg skriver "send" markerer den "end" fordi "end" er i min VB-keyword-fil.
Avatar billede slapstick Nybegynder
14. april 2004 - 12:34 #13
hvad med evt at checke om det ord du matcher er samme længde tegn som ordet i din reference fil?
Avatar billede stry Nybegynder
08. august 2004 - 08:59 #14
Lukker :-(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester