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 FunctionEsimerkki
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 SubKun 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!
Hieno vinkki =)
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.
Ei toimi Vb3:lla.
Eipä tuo toimi, ilman common dialogin lisäystä, eikä senkään jälkeen toimi :!
Vinkissä on tosiaan jäänyt kertomatta, että projekti tarvitsee vielä CommonDialogin jonka kooditason nimeksi laitetaan "cd". Muuten toimii ainakin minulla (testattu tänään)
Vinkin tekstit korjattu omien kommenttieni 16.7.2002 ja 3.1.3003 mukaisiksi
Todella hyvä vinkki!
Lisäsin tämän omaan tekstinkäsittely/koodieditorisoftaani
Eli miten näitä koodeta voi testata, *kyselee tyhmeliini*
Avaanko VisualBasic.Netin ja sitten mitä...??
Kiitti jos joku antaa lyhyet SELKOkieliset ohjeet aloittelujalle!!
"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.
Kiitti! Eiku HTML-editoria rustaamaan
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.