Pesquisando e destacando texto no RichEdit

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

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)

Layout final da tela

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.

Mostra a janela para adicionar o texto no 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.

Mostra o evento OnChange selecionado do componente 
edtPesquisa

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.

Exibi a pesquisa e o destaque do texto no RichEdit

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

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?