Prova con questo codice, anche se scandire continuamente le stesse lettere già formattate non è una soluzione performante.
codice:
var
LastSel: Integer;
i: Integer;
begin
MyRichEdit.Hide;
try
LastSel := MyRichEdit.SelStart;
for i := 0 to Length(MyRichEdit.Text) - 1 do
begin
MyRichEdit.SelStart := i;
MyRichEdit.SelLength := 1;
case (i+1) mod 3 of
0:
if MyRichEdit.SelAttributes.Color <> clGreen then
MyRichEdit.SelAttributes.Color := clGreen;
1:
if MyRichEdit.SelAttributes.Color <> clBlue then
MyRichEdit.SelAttributes.Color := clBlue;
2:
if MyRichEdit.SelAttributes.Color <> clRed then
MyRichEdit.SelAttributes.Color := clRed;
end;
MyRichEdit.SelStart:=LastSel;
end;
finally
MyRichEdit.Show;
MyRichEdit.SetFocus;
end;
end;
C'è da dire che forse sarebbe meglio evitare la continua selezione di testo, ma forse sarebbe necessario agire con qualche funzione API complessa.
Ciao!