BUSCA NO RICHTEXTBOX

USUARIO.EXCLUIDOS 26/05/2005 15:41:50
#85352
Olá,

Estou usando o codigo "RichTextBox1.Find Text1" para fazer busca por uma palavra em um richtextbox. O codigo funciona, mas para na primeria palavra que encontra, ou seja, se existirem mais palavras iguais no texto ele não mostra. Como faço para que a pesquisa pela palavra continue(como no WORD), sem ficar parada na primeira palavra? Obrigado.
LCSD 26/05/2005 15:59:23
#85353
Luiz98

Boa Tarde

Se você estiver usando o InStr para efetuar buscas em Strings longas a rotina abaixo deve resolver.

Private Sub cmdProcura_Click()
Dim i As Integer, iPos As Integer

If Len(txtRTF.Text) = 0 Then Exit Sub

For i = 1 To Len(RichTextBox1.Text)

iPos = InStr(i, RichTextBox1.Text, txtRTF.Text, vbTextCompare)
iPos = InStr(i, RichTextBox1.Text, txtRTF.Text, vbTextCompare)
If iPos = 0 Then Exit For
i = iPos + 1
Next
Next


End Sub


O Problema é que você não está adiantando o Ponteiro da pesquisa.

Até Breve
[s92]


** Em tempo, existe um Editor de Texto estilo WORDPAD aqui no VBMania que usa o RichTextBox, seria bom você baixar, assim poderia utilizar a lógica deste aplicativo para o RichTextBox
FELIPEA 26/05/2005 16:51:59
#85356
Private Sub Command1_Click()
RichTextBox1.Find Text1
End Sub
LCSD 26/05/2005 16:58:40
#85358
Felipe

Irá cair no mesmo erro que o Luiz relatou, indicará só a 1Âê ocorrência

Tem que alterar o Ponteiro
[s50]
FELIPEA 26/05/2005 17:00:15
#85359
Opa, desculpe aew
Acho q nao prestei muita atenção na pergunta
GABRIEL.LOGAN 26/05/2005 20:04:36
#85382
Resposta escolhida
LUIZ98, Estou fazendo um editor de PHP/HTML ai ja passei por isso antes, ai navegando na net encontrei num site um jeito diferente, onde as palavras vão sendo pintadas, veja:

Tirado do Link: http://www.macoratti.net/vb_rtb2.htm [txt-backcolor=#00ff00]Site do Macoratii[/txt-backcolor]

No código abaixo o Text1.text é a palavra a ser procurada no RichTextBox.

Sic.

Private Sub Form_Load()
'carrega um texto no controle
RichTextBox1.LoadFile ("c:    este\contrato2.txt ")
lblrodape.Visible = False
End Sub


Private Sub Command1_Click()
'chama a função passando o controle RichtextBox , a palavra que desejamos encontrar e
Dim valor As Integer
valor = destacandoPalavras(RichTextBox1, Text1.Text, vbBlue)
lblrodape.Visible = True
lblrodape.Caption = " Foram localizadas " & valor & " ocorrências da palavra '" & Text1.Text & "' no texto."
End Sub


Private Function destacandoPalavras(rtb As RichTextBox, procuraString As String, cor As Long) As Integer

Dim posicaoProcura As Long 'Posição do primeiro caractere a encontrar
Dim procuraTamanho As Long 'comprimento da string a encontrar
Dim inicioSelecaoOriginal As Long
Dim tamanhoSelecionadoOriginal As Long
Dim palavrasEncontradas As Integer 'Numero de vezes que a palavra foi encontrada

'Salva o ponto de inserção atual e o tamanho
inicioSelecaoOriginal = rtb.SelStart
tamanhoSelecionadoOriginal = rtb.SelLength

'armazena o tamanho da string a procurar
procuraTamanho = Len(procuraString)

'Tenta encontrar a primeira vez
posicaoProcura = rtb.Find(procuraString, 0, , rtfNoHighlight)

While posicaoProcura > 0
palavrasEncontradas = palavrasEncontradas + 1

rtb.SelStart = posicaoProcura
rtb.SelLength = procuraTamanho
rtb.SelColor = cor

'tenta encontrar a proxima
posicaoProcura = rtb.Find(procuraString, _
posicaoProcura + procuraTamanho, , rtfNoHighlight)
Wend

'Restaura o ponto de inserção ao tamanho e comprimento original
rtb.SelStart = inicioSelecaoOriginal
rtb.SelLength = tamanhoSelecionadoOriginal

'Retorna o numero de vezes que a palavra foi encontrada
destacandoPalavras = palavrasEncontradas

End Function
Tópico encerrado , respostas não são mais permitidas