Páginas

segunda-feira, 24 de junho de 2013

Alterando a cor de palavras em um editor de texto.

Olá galerinha, segue uma dica rápida.
Se você precisar criar um editor de texto onde alguma palavras do seu texto devem aparecer com alguma cor ou fonte diferente, sua saída, sem apelar para uma editor de texto de terceiro é o TRichEdit. O TMemo e o TEdit não possuem suporte a edição de fonte parcial do texto. É como comparar o NotePad com o WordPad.

Abaixo segue a receita de bolo de como fazer isso: 

function TForm1.AlterarCorDoTexto(pRichEdit: TRichEdit;
  pTexto: string; pColor: TColor): Boolean;
var
  lStartPos, lPosition, lEndpos, lPosIni: Integer;
begin
  lStartPos := 0;
  lEndpos := Length(pRichEdit.Text);
  lPosIni := pRichEdit.SelStart;

  pRichEdit.Lines.BeginUpdate;
  // Coloca tudo na fonte padrão
  pRichEdit.SelStart  := 0;
  pRichEdit.SelLength := lEndpos;
  pRichEdit.SelAttributes.Color := pRichEdit.Font.Color;

  // Localiza o texto de coloca ele na fonte desejada
  while pRichEdit.FindText(pTexto, lStartPos, lEndpos,
    [stMatchCase])<>-1 do
  begin
    lEndpos   := Length(pRichEdit.Text) - lStartPos;
    lPosition := pRichEdit.FindText(pTexto, lStartPos, 
      lEndpos, [stMatchCase]);
    Inc(lStartPos, Length(pTexto));
    pRichEdit.SelStart  := lPosition;
    pRichEdit.SelLength := Length(pTexto);
    pRichEdit.SelAttributes.Color := pColor;
  end;

  // Posiciona o cursor na posição originar e
  // atribui o texto para o definido no componente
  pRichEdit.SelStart  := lPosIni;
  pRichEdit.SelLength := 0;
  pRichEdit.SelAttributes.Color := pRichEdit.Font.Color;
  pRichEdit.Lines.EndUpdate;

end;

Bom agora é só fazer a chamada do método. Um lugar bom para fazer isso é o evento OnKeyDowm do seu RichEdit:

function TForm1.RichEdit1KeyDown(Sender: TObject; 
  var Key: Word; Shift: TShiftState);
begin
  AlterarCorDoTexto(RichEdit1,'muka',clBlue);
end;

Abraço a todos!