graag gedaan
0
RichTextBox: text highlighten
Door
VB6Dummy
, 04 mei 2011 07:02
Er zijn 9 reacties in dit onderwerp
#1
Geplaatst op 04 mei 2011 - 07:02
#2
Geplaatst op 04 mei 2011 - 07:02
Thx Ronneke,
nu werkt het ook perfect zonder if.
Merci voor al de hulp
nu werkt het ook perfect zonder if.
Merci voor al de hulp
#3
Geplaatst op 04 mei 2011 - 07:02
Ja, maar dat is echt een heel andere situatie. U wenst gedurende het intikken in een richttextbox, dat bepaalde woorden dan in een kleur komen te staan. Mijn code slaat op een file dat ingeladen wordt en waarin men dan bepaalde woorden kan opzoeken. In uw geval is er nog niet echt een EOF . Zet daarom:
Code:
Plaats = Zoek + Lengte - 1
Greetz
Code:
Plaats = Zoek + Lengte - 1
Greetz
#4
Geplaatst op 04 mei 2011 - 07:02
Hij moet alle gezochte woorden highlighten.
Dit is momenteel alle code die ik in mijn programma heb staan tot nu toe. Ik heb enkel een RTB op het form geplaatst.
Code:
Private Sub RTBHighlight(ByVal Tekst As String, ByVal Kleur As Color)
Dim Lengte As Integer = Tekst.Length
Dim Plaats, Zoek As Integer
Zoek = RTB.Find(Tekst, 0, -1, RichTextBoxFinds.WholeWord)
Do Until Zoek < 0
'If Zoek < Plaats Then Exit Do
RTB.Selectionstart = Zoek
RTB.SelectionLength = Lengte
RTB.SelectionColor = Kleur
Plaats = Zoek + Lengte
Zoek = RTB.Find(Tekst, Plaats, -1, RichTextBoxFinds.WholeWord)
Loop
End Sub
Private Sub RTB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RTB.TextChanged
Dim Start As Integer
With RTB
Start = .Selectionstart
.Selectionstart = 0
.SelectionLength = .TextLength
.SelectionColor = Black
'hier komt nog een luske die de data uit een file/DB haalt
'enkele teksten en hun kleur
RTBHighlight("include", Red)
RTBHighlight("require", Red)
RTBHighlight("While", Blue)
RTBHighlight("Sub", Blue)
RTBHighlight("End", Blue)
.Selectionstart = Start
.SelectionLength = 0
End With
End Sub
Je kan het zelf eens testen met bovenstaande code. Zonder die If blijft het bij mij allesinds vasthangen in de lus.
Dit is momenteel alle code die ik in mijn programma heb staan tot nu toe. Ik heb enkel een RTB op het form geplaatst.
Code:
Private Sub RTBHighlight(ByVal Tekst As String, ByVal Kleur As Color)
Dim Lengte As Integer = Tekst.Length
Dim Plaats, Zoek As Integer
Zoek = RTB.Find(Tekst, 0, -1, RichTextBoxFinds.WholeWord)
Do Until Zoek < 0
'If Zoek < Plaats Then Exit Do
RTB.Selectionstart = Zoek
RTB.SelectionLength = Lengte
RTB.SelectionColor = Kleur
Plaats = Zoek + Lengte
Zoek = RTB.Find(Tekst, Plaats, -1, RichTextBoxFinds.WholeWord)
Loop
End Sub
Private Sub RTB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RTB.TextChanged
Dim Start As Integer
With RTB
Start = .Selectionstart
.Selectionstart = 0
.SelectionLength = .TextLength
.SelectionColor = Black
'hier komt nog een luske die de data uit een file/DB haalt
'enkele teksten en hun kleur
RTBHighlight("include", Red)
RTBHighlight("require", Red)
RTBHighlight("While", Blue)
RTBHighlight("Sub", Blue)
RTBHighlight("End", Blue)
.Selectionstart = Start
.SelectionLength = 0
End With
End Sub
Je kan het zelf eens testen met bovenstaande code. Zonder die If blijft het bij mij allesinds vasthangen in de lus.
#5
Geplaatst op 04 mei 2011 - 07:02
Hmmm, wat is juist de bedoeling? Mijn code gaat het gezocht woord over gans de tekst gaan opsporen en vervangen in een kleur, dus ook in het 10x erin staat. Of mag dit niet ?
Greetz
Greetz
#6
Geplaatst op 04 mei 2011 - 07:02
heykes,
Het is iets raars, want hij vind telkens opnieuw dezelfde woorden terug volgens mij. En met die If functie werkt dat zonder 1 probleem.
Het is iets raars, want hij vind telkens opnieuw dezelfde woorden terug volgens mij. En met die If functie werkt dat zonder 1 probleem.
#7
Geplaatst op 04 mei 2011 - 07:02
Hmmm, Ronneke krabt eens in zijn haar (en ik heb er al niet teveel )
Heb dat hier uitgetest op een 50Kb rtf-file en die zoekt alle gewenste woorden op en zet ze in een kleur. Door die 'Do Until Zoek < 0' kant hij toch niet in een oneindige loop geraken ? Op het moment dat hij het woord niet meer vindt, wordt Zoek = -1 en komt daardoor uit de loop.
Greetz
Heb dat hier uitgetest op een 50Kb rtf-file en die zoekt alle gewenste woorden op en zet ze in een kleur. Door die 'Do Until Zoek < 0' kant hij toch niet in een oneindige loop geraken ? Op het moment dat hij het woord niet meer vindt, wordt Zoek = -1 en komt daardoor uit de loop.
Greetz
#8
Geplaatst op 04 mei 2011 - 07:02
Hey Ronneke,
uw code werkt perfect buiten het feit dat hij in een oneindige lus terecht komt. Dit probleem heb ik dan zelf effe aangepast door boven
Code:
Plaats = Zoek + Lengte
Een if bij te plaatsen:
Code:
If Zoek < Plaats then exit Do
uw code werkt perfect buiten het feit dat hij in een oneindige lus terecht komt. Dit probleem heb ik dan zelf effe aangepast door boven
Code:
Plaats = Zoek + Lengte
Een if bij te plaatsen:
Code:
If Zoek < Plaats then exit Do
#9
Geplaatst op 04 mei 2011 - 07:01
Hallo
Ik vermoed dat deze code minder belastend voor uw CPU zal zijn:
Code:
Private Sub RTBHighlight(ByVal Tekst As String, ByVal Kleur As Color)
Dim Lengte As Integer = Tekst.Length
Dim Plaats, Zoek As Integer
Zoek = RTB.Find(Tekst, 0, -1, RichTextBoxFinds.WholeWord)
Do Until Zoek < 0
RTB.Selectionstart = Zoek
RTB.SelectionLength = Lengte
RTB.SelectionColor = Kleur
Plaats = Zoek + Lengte
Zoek = RTB.Find(Tekst, Plaats, -1, RichTextBoxFinds.WholeWord)
Loop
Succes
Ik vermoed dat deze code minder belastend voor uw CPU zal zijn:
Code:
Private Sub RTBHighlight(ByVal Tekst As String, ByVal Kleur As Color)
Dim Lengte As Integer = Tekst.Length
Dim Plaats, Zoek As Integer
Zoek = RTB.Find(Tekst, 0, -1, RichTextBoxFinds.WholeWord)
Do Until Zoek < 0
RTB.Selectionstart = Zoek
RTB.SelectionLength = Lengte
RTB.SelectionColor = Kleur
Plaats = Zoek + Lengte
Zoek = RTB.Find(Tekst, Plaats, -1, RichTextBoxFinds.WholeWord)
Loop
Succes
#10
Geplaatst op 04 mei 2011 - 07:01
Heykes,
Ik heb op mijn form een RTB staan en ik kan de tekst laten highligthen
uitleg highlighten: (voor diegene die niet weten wat ik bedoel)
(For i=0 to 5
'acties
Next )
Ik heb er een functie voor ontwikkeld maar deze vergt uiterst veel van de CPU.
Sub RTBHighlight(ByVal Tekst As String, ByVal Kleur As Color)
Dim i, Vorige As Integer
i = 0
Vorige = 0
With RTB 'richtextbox
For i = 0 To .TextLength
.Find(Tekst, i, RichTextBoxFinds.WholeWord)
If LCase(.SelectedText) = LCase(Tekst) Then
.SelectionColor = Kleur
i += .SelectionLength
.SelectedText = Tekst
End If
Next
End With
End Sub
Kent er iemand van jullie een andere oplossing die minder CPU-vermogen eist?
Ik heb op mijn form een RTB staan en ik kan de tekst laten highligthen
uitleg highlighten: (voor diegene die niet weten wat ik bedoel)
(For i=0 to 5
'acties
Next )
Ik heb er een functie voor ontwikkeld maar deze vergt uiterst veel van de CPU.
Sub RTBHighlight(ByVal Tekst As String, ByVal Kleur As Color)
Dim i, Vorige As Integer
i = 0
Vorige = 0
With RTB 'richtextbox
For i = 0 To .TextLength
.Find(Tekst, i, RichTextBoxFinds.WholeWord)
If LCase(.SelectedText) = LCase(Tekst) Then
.SelectionColor = Kleur
i += .SelectionLength
.SelectedText = Tekst
End If
Next
End With
End Sub
Kent er iemand van jullie een andere oplossing die minder CPU-vermogen eist?
0 gebruiker(s) lezen dit onderwerp
0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers