Pesquisando e destacando texto no RichEdit

Veja neste artigo como pesquisar e destacar textos dentro de um RichEdit em Delphi.

Olá pessoal, nesse artigo demonstrarei como pesquisar e destacar uma palavra ou texto dentro do componente RichEdit, não é muito comum esse tipo de prática por esse motivo resolvi escrever esse artigo.

O componente RichEdit é muito usado para exibir grandes quantidades de texto tais como observações, complementos etc., sendo que em certas situações pode ser necessário destacar determinada palavra ou frase contida no texto exibido pelo componente.

Vamos construir a tela, adicione os seguintes componentes:

- 1 TEdit (para pesquisar o conteúdo do RichEdit)

- 1 TRichEdit (para exibir o texto)


Figura1: Layout final da tela.

Agora vamos adicionar um texto no RichEdit, no Object Inpector selecione a propriedade Lines e clique no botão “...”, será aberta uma nova janela como mostrado na figura 2, onde adicionaremos o texto que será exibido no componente RichEdit.


Figura2: Mostra a janela para adicionar o texto no RichEdit.

Para esse exemplo adicionei o seguinte texto:

- PORTAL

- DEVMEDIA

- TUDO EM UM SÓ LUGAR!

Agora vamos selecionar na aba Events do Object Inspector o evento OnChange do componente Edit que nesse caso foi renomeado para “edtPesquisa”, esse evento será disparado todas vez que o edtPesquisa receber um caracter.


Figura3: Mostra o evento OnChange selecionado do componente edtPesquisa.

Com um duplo clique será carregado o evento no editor, agora vamos codificar digite o seguinte código.

Listagem 1: Esta listagem mostra o código do evento OnChange

procedure TfrmPrincipal.edtPesquisaChange(Sender: TObject); var iPosIni : integer; begin //Carrega o RichEdit com as propriedades iniciais RichEdit.SelStart := 0; RichEdit.SelLength := length(RichEdit.Text); RichEdit.SelAttributes.color := clBlack; RichEdit.SelAttributes.style := []; RichEdit.SelAttributes.Size := 8; //Encontra e atribui a posição inicial do texto no RichEdit iPosIni := RichEdit.FindText(edtPesquisa.Text, 0, length(RichEdit.Text), []); //Verifica se o texto foi encontrado if iPosIni >= 0 then begin RichEdit.SelStart := iPosIni; RichEdit.SelLength := length(edtPesquisa.Text); RichEdit.SelAttributes.color := clRed; RichEdit.SelAttributes.style := [fsBold]; RichEdit.SelAttributes.Size := RichEdit.SelAttributes.Size + 16; end; end;

O código está comentado, mas vou explicar os principais pontos. No primeiro bloco de código carrego as informações iniciais do RichEdit, entre elas informo a posição inicial e o tamanho do texto que está sendo exibido no RichEdit, esse bloco é importante porque caso o texto informado no edtPesquisa não seja encontrado no RichEdit então o conteúdo do mesmo volta a sua font inicial.

Depois executo a função interna do RichEdit, FindText ela recebe 4 parâmetros:

1 - Texto a ser pesquisado

2 - Posição interna onde será iniciado a pesquisa

3 - Tamanho do texto do RichEdit

4 - (tsWholeWorld) Só aceitar palavras inteiras, (tsMatchCase)Se quiser diferenciar maiúscula e minúscula

Observação: O 4º parâmetro é opcional, pode se informar as 2 opções, 1 opção ou nenhuma, depende da necessidade.

Essa função procura dentro do conteúdo do RichEdit um conjunto de caracteres que seja compatível com o texto informado no edtPesquisa, caso seja encontrado é retornado a posição inicial da combinação do texto interno do RichEdit e atribuído a variável iPosIni. Logo após função ser executada verifico se o valor da variável iPosIni é maior que 0, caso seja significa que foi encontrado uma combinação compatível, então informo a posição inicial e o tamanho do conjunto de caracteres para as respectivas propriedade do RichEdit.

Com essas informações já é possível alterar a font somente dos caracteres compatíveis com o texto digitado no edtPesquisa, nesse caso alterei o tamanho, cor e estilo da letra, como esse código está no evento OnChange, sempre que for digitado uma letra que esteja no RichEdit será alterada a fonte.

Vejam o resultado final.


Figura 4: Exibi a pesquisa e o destaque do texto no RichEdit

Bom pessoal demonstrei nesse artigo como pode ser simples pesquisar e destacar um texto dentro do componente RichEdit, essa prática pode ser muito interessante para diversos tipos de aplicações, eu mesmo já usei.

Com isso finalizo mais um artigo. Espero que tenham apreciado e até a próxima.

Qualquer dúvida meu e-mail: wllfl@ig.com.br

Abraços

Artigos relacionados