Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: RichTextBoxin väritys

kayttaja-3842 [20.01.2007 10:42:14]

#

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.

sooda [20.01.2007 10:48:44]

#

Korjaamalla sen taginetsimisalgoritmis. Vikaa varmaan siinä, mikä löytää tagin loppumiskohdan. Ellet itse löydä vikaa, niin pistä olennainen osa koodia näkyville.

kayttaja-3842 [20.01.2007 11:02:01]

#

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

Antti Laaksonen [20.01.2007 21:21:49]

#

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.

kayttaja-3842 [21.01.2007 16:41:34]

#

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.

Antti Laaksonen [21.01.2007 22:41:48]

#

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.

Vastaus

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

Tietoa sivustosta