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.
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:
Abraço a todos!
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);
var Key: Word; Shift: TShiftState);
begin
AlterarCorDoTexto(RichEdit1,'muka',clBlue);
end;
AlterarCorDoTexto(RichEdit1,'muka',clBlue);
end;
Abraço a todos!