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 Sub
Kunnon 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 Sub
Koodi 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.