Joo eli olen tekemässä html editoria ja olen tehnyt richbox:iin koodin joka etsii kaikki html tagit ja muuttaa niiden värit sinikiski. Eli miten saisin tehtyä niin, että väri ei kloonautuisi jos tagista lähetään kirjottaa tekstiä.
Eli pieni esimerkki
ensiksi kirjotetaan box:iin
<html> //Tämä muuttuu nytten siniseksi <html>Kirjotan tähän tekstiä //nytten tuo kirjotettu teksti muuttuu kanssa siniseksi, jos siihen ei laitan väliä. Eli jos kirjotetaan näin <html> Kirjotan tähän tekstiä //Niin nutten tuo teksti pysyy mustana, joka olisi tarkoitus saada sillonkin kun teksti kirjotetaan tagista kiinni.
Korjaamalla sen taginetsimisalgoritmis. Vikaa varmaan siinä, mikä löytää tagin loppumiskohdan. Ellet itse löydä vikaa, niin pistä olennainen osa koodia näkyville.
Joo tässä olisi koodi... Pitäisi vielä saada jotenkin tietää, miten saisi koodin päivittämään tekstibox:ia vain sillon kun uusi </html> on havaittu.
Nyttenhän tuo tekeenin, että heti kun </html> löytyy aloitetaan etsimininen vaihdetaan väri muutetaan sijainti alkuun etsitään taas (tulee loputon silmukka)
Private Sub html_Change()
If InStr(html.Text, "</html>") <> 0 Then
With html
sijainti = .Find("</html>", sijainti)
.SelColor = vbBlue
DoEvents
.SelStart = 0
.SelLength = 0
.SelColor = vbBlack
End With
End If
End SubKunnon värityksen teko ei ole helppo juttu. Yksi ratkaisu on tutkia teksti alusta loppuun ja värittää tagit, jotka tunnistaa siitä, että ne alkavat merkillä < ja päättyvät merkkiin >. Kuitenkin tagi voi muuttua niin, että se ei enää olekaan tagi, jolloin väritys pitää poistaa. Tekstiä voi myös leikepöydän kautta tulla lisää tai poistua suurissa erissä.
Tekstin väritys onnistuu kyllä SelColor-ominaisuuden avulla, mutta tekstissä näkyy häiriöitä sen värityksen aikana. Ehkä parempi ratkaisu olisi käyttää ominaisuutta TextRTF, jonka avulla voi muuttaa suoraan koko tekstin muotoilua. Silloin värit saa ainakin määritettyä juuri haluamallaan tavalla.
Joo, eli miten olisi paras tapa toteuttaa tämä tagina värjäs ja tunnistaminen?
Itse yritin jotain säätää mutta tais mennä metkään aika paljon..
If InStr(html.Text, "<") <> 0 Then If InStr(html.Text, ">") <> 0 Then End If End If ...mitä netistä tutkin tuossa tarvittaisiin Mid funktiotakin.
Tageja voi tunnistaa ja värittää vaikka näin:
Sub VaritaHTML(teksti As RichTextBox)
Dim i As Integer
Dim merkki As String, tagi As Boolean
Dim alku As Integer, kohta As Integer
' pannaan talteen kohdistimen kohta
kohta = teksti.SelStart
' tutkitaan kaikki tekstin merkit
For i = 1 To Len(teksti.Text)
merkki = Mid(teksti.Text, i, 1)
' tagin alun tunnistus
If merkki = "<" Then
tagi = True
alku = i - 1
End If
' tagin lopun tunnistus
If merkki = ">" And tagi Then
tagi = False
' muutetaan tagi siniseksi
teksti.SelStart = alku
teksti.SelLength = i - alku
teksti.SelColor = vbBlue
End If
Next
' palautetaan kohdistimen kohta ja väri
teksti.SelStart = kohta
teksti.SelLength = 0
teksti.SelColor = vbBlack
End SubKoodi tutkii tekstin merkit alusta loppuun, pitää muistissa tagin alun kohtaa ja värittää tagin, jos myös loppu löytyy. Tämä on kuitenkin pelkkä esimerkki eikä "paras tapa": koodi ei osaa poistaa vanhoja värityksiä ja SelColor-ominaisuuden käytössä on omat ongelmansa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.