Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Johnny Mercy

RichTextBox Palavras Coloridas

Mensagens Recomendadas

Johnny Mercy

Boas, eu tenho um problema..

Eu quero que algumas palavras mudem de cor conforme as pessoas vão escrevendo na richtextbox, por exemplo:

<?php = vermelho

<html> = azul

Eu já consegui fazer para a primeira instância que ele encontra assim:

            Dim i As Integer = RichTextBox1.Find(wordSearch, RichTextBoxFinds.NoHighlight)
            If (i <> 0) Then
                RichTextBox1.Select(i, wordSearch.Length)
                RichTextBox1.SelectionColor = color
            End If

Este código trás me vários problemas entre eles os mais destacados como: a lentidão no programa (porque ele corre sempre esse código quando o utilizador escreve algo na richbox) e apenas encontra a 1ª palavra (talvez consiga resolver isto mas não tentei ainda porque talvez alguém saiba responder a pergunta que vou fazer a seguir lol).

Alguém sabe uma maneira melhor de fazer isto? Não tenho muita experiência com richtextbox's por isso não sei o que fazer! Eu estive a pensar se existe maneira de criar uma espécie de filtro que "filtra-se" as palavras antes de elas serem escritas ou algo do género.

Um exemplo muito bom do que eu quero fazer é por exemplo o Visual Studio, dreamweaver, etc..

Espero que me possam ajudar! Obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Johnny Mercy

Olha a maneira que ele utilizou foi a mesma que a minha, ele vai correr tudo na mesma. Se for este o único método então já tenho a funcionar (só que dá um pouco de "lag").

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Weasel

E se colocasses a verificar a ultima coisa escrita sempre que o utilizador pressione a barra de espaços ou a tecla enter.

Ou seja guardas o que se está a escrever numa variável até o utilizador pressionar Espaço ou Enter, aí, verifica o conteúdo da veriam, é texto para mudar a cor, muda e limpa a variável para a próxima palavra, não é texto para mudar a cor apenas limpa a variável para a próxima palavra.

Deve ser mais rápido assim.


Knowledge to the masses


Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Não tem a haver com o teu problema: as richtextboxes permitem as corzinhas e tudo mais através do Richformat.

Cuidado ao gravares a informação da caixa:

Se gravares o richformat fica uma bodega ilegível

Se gravares o texto só, perdes o richformat.

Arranja maneira de contornar isso.

Para o teu problema, penso que aceleravas o processo se reduzisses um pouco a busca, por exemplo:

- Tem lógica trabalhares apenas na linha que estás a editar, ao invés do texto todo

- Tem lógica partires essa mesma linha palavra por palavra, trimmed, o que é alcançável com um simples "split"

- ... considera mais opções para a tua necessidade específica


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Froidz

E ai Johnny, tudo bom?

Quando iniciei em Visual Basic esta foi a primeira coisa que desejei fazer, pois já tinha um projeto em mente, levei em média uma semana e meia para descubrir um modo, lendo o help do vb e vendo uns tutoriais na internet.

Aconteceu que eu juntei todo o conhecimento adquirido com isso tudo e criei uma função:

Function Froidz_TextColors(ByVal my_rtb As RichTextBox, ByVal txt As String, ByVal mycor As System.Drawing.Color, ByVal init As Integer)
        'procura a string "text", se encontrá-la...
        Dim cursor_pos = my_rtb.SelectionStart
        Dim cursor_pos2 = my_rtb.SelectionLength
        Dim find_pos = 0
        Dim casos = 0
        Dim str_exists = InStr(init, my_rtb.Text, txt)

        If str_exists <> 0 Then

            With my_rtb
                If Not my_rtb.SelectedText = txt Then
                    .SelectionFont = New Font("Verdana", 8, FontStyle.Regular)
                    '.SelectionColor = mycor
                    .SelectionStart = str_exists - 1
                    .SelectionLength = Len(txt)
                    .SelectionColor = mycor
                    .SelectionFont = New Font("Verdana", 8, FontStyle.Regular)
                    '.SelectionColor = Color.Black
                    .SelectionStart = cursor_pos
                    .SelectionLength = cursor_pos2
                    .SelectionColor = Color.Black
                Else
                    .SelectionStart = cursor_pos
                    .SelectionLength = cursor_pos2
                    .SelectionColor = Color.Black
                End If
            End With

            init = str_exists + Len(txt)
            Froidz_TextColors = 1 + Froidz_TextColors(my_rtb, txt, mycor, init)
        End If
        cursor_pos = my_rtb.SelectionStart
        Return Nothing
    End Function

Este código procura uma string e muda a cor dela, e a boa notícia, é que várias strings iguais podem ser coloridas ^^

Para usar a função faça isto:

Froidz_TextColors(RichTextBox1, "teste", Color.Red, 1)

Agora escreva "teste" no richtextbox várias vezes e veja se a palavra muda de cor ^^

Valeu! o/

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.