Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: HTML koodin värikoodaus

Sivun loppuun

trinit [12.07.2002 13:33:03]

#

Tällä ColorTAGS funktiolla saat värjättyä RichTextBox:ssa olevan HTML koodin. Funktio värjää tagit, tagien määrittelyt, erikoismerkit ja kommenttirivit omilla väreillään jotka voi muuttaa koodista

Moduuliin

' HTML_TagColoring moduuli versio 1.00 (13.7.2002)
'
' (c) Tero Pietilä  http://www.trinit.tk
'
'
' HTML_TagColoring moduuli on tarkoitettu HTML koodin värjäykseen
' jossa tagit, tagien määrittelyt, erikoismerkit ja kommenttirivit
' värjätään omilla väreillään. Funktio ei ota huomioon <SCRIPT></script>
' tageja, joten skriptit värjäytyvät HTML värikoodauksen mukaan

Public colTAG As Long
Public colDEF As Long
Public colTEXT As Long
Public colENTITY As Long
Public colCOMMENT As Long


Public Function ColorTAGS(ctrl As Control) As String
' Funktiolle annetaan kaksi parametriä: strTextToColor sekä ctrl
'
' - strTextToColor sisältää merkkijonon josta etsitään värjättäviä kohteita
' - ctrl on viittaus siihen tekstikenttään jossa värjättävä teksti sijaitsee
'
' Esimerkki funktion käytöstä:
'
'   ColorTags RichTextBox1
'
' jossa RichTextBox1 tarkoittaa tekstikentän kooditason nimeä. Esimerkissä 1
' on annettu värjättäväksi tekstiksi tekstikentän kaikki tekstit.
'
' HUOM! funktion käyttämät komennot joilla vaihdetaan tekstin väriä
'       toimivat ainoastaan RichTextBox -kontrollilla!


    colTAG = RGB(0, 0, 255)                ' Tagien väri
    colDEF = RGB(0, 128, 128)              ' Määrittelyn (definition) väri
    colTEXT = RGB(0, 0, 0)                 ' Muun tekstin väri
    colENTITY = RGB(255, 0, 0)             ' Erikoismerkkien väri
    colCOMMENT = RGB(128, 128, 128)        ' Kommenttien väri


    Dim TAG_StartPos As Long
    Dim TAG_EndPos As Long
    Dim TAG_Length As Long
    Dim ReadPos As Long
    Dim CursorPos As Long

    Dim tmp1 As Long
    Dim tmp2 As Long
    Dim tmp3 As Long

    TAG_StartPos = 0
    TAG_EndPos = -1
    TAG_Length = -1
    ReadPos = 1

    tmp1 = -1
    tmp2 = -1
    tmp3 = -1

    strTextToColor = ctrl.Text          ' Luetaan kontrollin kaikki tekstit muistiin
    CursorPos = ctrl.SelStart           ' Otetaan talteen kursorin sijainti

    ctrl.Visible = False

    ' Värjätään kaikki < ja > merkkien välissä olevat
    ' tekstit colTAG värillä
    Do

        TAG_StartPos = InStr(ReadPos, strTextToColor, "<"): ReadPos = TAG_StartPos

        If TAG_StartPos > 0 Then

            TAG_EndPos = InStr(ReadPos, strTextToColor, ">"): ReadPos = TAG_EndPos
            TAG_Length = TAG_EndPos - TAG_StartPos + 1

            If TAG_Length > 0 Then
                ctrl.SelStart = TAG_StartPos - 1
                ctrl.SelLength = TAG_Length
                ctrl.SelColor = colTAG
                ctrl.SelLength = 0
                ctrl.SelStart = CursorPos
            End If

        End If

    Loop Until ReadPos <= 0

    TAG_StartPos = 0
    TAG_EndPos = -1
    TAG_Length = -1
    ReadPos = 1

    ' Värjätään kaikki <!-- ja --> merkkien välissä olevat
    ' tekstit colCOMMENT värillä
    Do

        TAG_StartPos = InStr(ReadPos, strTextToColor, "<!--"): ReadPos = TAG_StartPos

        If TAG_StartPos > 0 Then

            TAG_EndPos = InStr(ReadPos, strTextToColor, "-->"): ReadPos = TAG_EndPos
            TAG_Length = TAG_EndPos - TAG_StartPos + 3

            If TAG_Length > 0 Then
                ctrl.SelStart = TAG_StartPos - 1
                ctrl.SelLength = TAG_Length
                ctrl.SelColor = colCOMMENT
                ctrl.SelLength = 0
                ctrl.SelStart = CursorPos
            End If

        End If

    Loop Until ReadPos <= 0

    TAG_StartPos = 0
    TAG_EndPos = -1
    TAG_Length = -1
    ReadPos = 1

    ' Värjätään tagien määrittelyosat colDEF värillä
    Do

        TAG_StartPos = InStr(ReadPos, strTextToColor, "="): ReadPos = TAG_StartPos

        If TAG_StartPos > 0 Then

            tmp1 = InStr(ReadPos, strTextToColor, " ")
            tmp2 = InStr(ReadPos, strTextToColor, Chr$(34))
            tmp3 = InStr(ReadPos, strTextToColor, ">")


            If tmp2 > 0 And tmp2 < tmp3 Then
                ' Jos määrittely on suljettu lainausmerkkien sisään
                TAG_EndPos = InStr(tmp2 + 1, strTextToColor, Chr$(34)): ReadPos = TAG_EndPos
            Else
                ' Määrittelyä ei ole suljettu lainausmerkkien sisään

                If tmp1 < tmp3 Then
                    TAG_EndPos = tmp1: ReadPos = TAG_EndPos
                Else
                    TAG_EndPos = tmp3 - 1: ReadPos = TAG_EndPos
                End If

            End If

            TAG_Length = TAG_EndPos - TAG_StartPos + 1

            If TAG_Length > 0 Then
                ctrl.SelStart = TAG_StartPos - 1
                ctrl.SelLength = TAG_Length

                ' Värjätään vain jos rivi ei ole kommentissa
                If ctrl.SelColor <> colCOMMENT Then
                    ctrl.SelColor = colDEF
                End If

                ctrl.SelLength = 0
                ctrl.SelStart = CursorPos
            End If

        End If

    Loop Until ReadPos <= 0

    TAG_StartPos = 0
    TAG_EndPos = -1
    TAG_Length = -1
    ReadPos = 1


    ' Värjätään kaikki erikoismerkit colENTITY värillä
    Do

        TAG_StartPos = InStr(ReadPos, strTextToColor, "&"): ReadPos = TAG_StartPos

        If TAG_StartPos > 0 Then

            TAG_EndPos = InStr(ReadPos, strTextToColor, ";"): ReadPos = TAG_EndPos
            TAG_Length = TAG_EndPos - TAG_StartPos + 1

            If TAG_Length > 0 Then
                ctrl.SelStart = TAG_StartPos - 1
                ctrl.SelLength = TAG_Length

                ' Värjätään vain jos rivi ei ole kommentissa
                If ctrl.SelColor <> colCOMMENT Then
                    ctrl.SelColor = colENTITY
                End If

                ctrl.SelLength = 0
                ctrl.SelStart = CursorPos
            End If

        End If

    Loop Until ReadPos <= 0

    ctrl.Visible = True

End Function

Esimerkki

Jotta voit kokeilla funktiota luo uusi projekti jossa on yksi formi (kooditason nimeksi Form1), RichTextBox (kooditason nimeksi rtBox) ja CommonDialog (kooditason nimeksi cd)

Lisää seuraavat koodirivit formiin:

Private Sub Form_Load()

    rtBox.RightMargin = 65535

    cd.Filter = "HTML tiedostot (*.html *.htm)|*.html;*.htm|Kaikki tiedostot (*.*)|*.*"
    cd.ShowOpen

    rtBox.FileName = cd.FileName

End Sub

Private Sub Form_Resize()

    If Me.WindowState <> 1 Then
        With rtBox
            .Left = 0
            .Top = 0
            .Width = Me.ScaleWidth
            .Height = Me.ScaleHeight
        End With
    End If

End Sub

Private Sub rtBox_Click()

    Dim ctrl As Control     ' Luodaan uusi muuttuja viittaamaan kontrolliin
    Set ctrl = rtBox

    ColorTAGS ctrl

End Sub

Kun käynnistät ohjelman avautuu ikkuna, josta voit avata HTML-tiedoston. Kun olet sen avannut, tiedosto avautuu rtBox:iin. Värikoodauksen suoritat klikkaamalla rtBox:ia!

thefox [16.07.2002 02:26:11]

#

Hieno vinkki =)

trinit [16.07.2002 17:51:17]

#

Huomasin juuri, että koodissa on pieni virhe funktion käytön osalta. Eli kohta jossa lukee:

' Esimerkki funktion käytöstä:
'
' ColorTags RichTextBox1.Text, RichTextBox1

pitäisi olla:

' Esimerkki funktion käytöstä:
'
' ColorTags RichTextBox1

Mutta ei tuo haittaa, koska rtBox_Click tapahtumassa funktiota on kuitenkin käytetty oikein. Lisäksi tänään huomasin värikoodauksessa ainakin yhden bugin joka aiheuttaa sen, mikäli tagin jokin määrittely loppuu lainausmerkkiin sitä seuraavat lisämäärittelyt värjäytyvät colDEF -värillä tagin loppuun asti.

Mv [27.09.2002 21:07:55]

#

Ei toimi Vb3:lla.

progo [02.01.2003 13:58:41]

#

Eipä tuo toimi, ilman common dialogin lisäystä, eikä senkään jälkeen toimi :!

trinit [03.01.2003 14:23:05]

#

Vinkissä on tosiaan jäänyt kertomatta, että projekti tarvitsee vielä CommonDialogin jonka kooditason nimeksi laitetaan "cd". Muuten toimii ainakin minulla (testattu tänään)

trinit [23.03.2003 15:39:26]

#

Vinkin tekstit korjattu omien kommenttieni 16.7.2002 ja 3.1.3003 mukaisiksi

Heikki [25.10.2003 15:03:24]

#

Todella hyvä vinkki!

Lisäsin tämän omaan tekstinkäsittely/koodieditorisoftaani

Jukuripää [11.11.2003 16:08:34]

#

Eli miten näitä koodeta voi testata, *kyselee tyhmeliini*
Avaanko VisualBasic.Netin ja sitten mitä...??

Kiitti jos joku antaa lyhyet SELKOkieliset ohjeet aloittelujalle!!

trinit [11.11.2003 16:28:42]

#

"Esimerkki funktion käytöstä" laatikon mukaan kun teet uuden projektin jossa on formi, richtextbox ja commondialog sekä asetat niiden kooditasojen nimiksi yllä kerrotut nimet. Tämän jälkeen lisäät projektiin moduulin (Module) johon kopioit "Nämä menevät moduuliin" laatikon koodit. Samoin teet tuon toisen laatikon koodien kanssa mutta ne tulee Formin koodeihin.

Näin siis lyhyesti kerrottuna ei kylläkään kovin selvästi. VB .Net:stä en tiedä miten siinä menee ja toimiiko tämä koodi siinä laisinkaan? Kannattaa kysellä ennemmin keskustelualueen puolella tällaisia asioita.

Sharph [12.11.2003 17:11:59]

#

Kiitti! Eiku HTML-editoria rustaamaan

miiro [01.10.2005 19:19:01]

#

Tämä on kyllä huono html-editoriin, sillä tuo väritys kestää melko pienissäkin tiedostoissa kauan, joten se ei saisi värittää sitä joka muutoksen jälkeen.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta