Ir para conteúdo
Fórum Script Brasil
  • 0

Richedit (linhas Coloridas)


Erso

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0
Pessoal eu preiso colorir linhas de um riche edite

tipo ocara formatar pra deichar tal palavra com cor de fundo verde outra azul essas coisas.

Esses tempos atrás fiz uma gambiarra para implementar algo parecido para destacar ocorrências de determinada palavra no texto. Mas, pesquisando um pouco mais, descobri que o recurso está disponível a partir da versão 2.0 do RichEdit (msdn - procurar por background) - quem mandou eu não pesquisar primeiro. :ph34r:

Então, procurando simplificar o código e generalizá-lo, de modo a ser colocado em uma unit de "rotinas úteis", eu o escrevi para receber o RichEdit como parâmetro, bem como as cores de fundo e frente e modo de marcação - seleção, palavra ou todo texto. O código para implementar a função destaca texto, ficou assim:

// Modos possíveis: SCF_ALL / SCF_SELECTION / SCF_WORD  (*** declaradas na unit RichEdit)
procedure MarkRichEditText(RichEdit :TRichEdit; fgColor, bkColor :TColor; MarkMode :Integer);
var
  CharFormat :TCharFormat2;
begin
 // na marcação de palavra, na chamada a EM_SETCHARFORMAT deve ser
 // concatenado SCF_SELECTION ao parâmetro SCF_WORD
  if MarkMode = SCF_WORD then
    MarkMode := MarkMode or SCF_SELECTION;
  CharFormat.cbSize := SizeOf(CharFormat);
  CharFormat.dwMask := CFM_BACKCOLOR or CFM_COLOR;
  CharFormat.crBackColor := ColorToRGB(bkColor);
  CharFormat.crTextColor := ColorToRGB(fgColor);
  SendMessage(RichEdit.handle, EM_SETCHARFORMAT, MarkMode, LongInt(@CharFormat));
end;

forma de uso:

- Marcar texto selecionado -> MarkRichEditText(RichEdit1, clRed, clLime, SCF_SELECTION);

- Marcar texto inteiro -> MarkRichEditText(RichEdit1, clBlack, clYellow, SCF_ALL);

- Marcar palavra sob o cursor -> MarkRichEditText(RichEdit1, RichEdit1.Font.Color, clAqua, SCF_WORD);

Ref. EM_SETCHARFORMAT (msdn), CHARFORMAT (msdn), CHARFORMAT2 (msdn)

Abraços

_________

Edit: Atualizados os links

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

Seguindo a filosofia da procedure acima, aparentemente voce precisaria utilizar o comando EM_GETCHARFORMAT utilizando como parâmetro a estrutura CHARFORMAT2 e no qual o campo dwMask deve conter o valor SCF_SELECTION.

Eu só não posso lhe afirmar que quando houver diferentes cores em uma seleção.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...