Hola,
Veo que StringReplace al parecer no da el ancho. Buscando por ahí he visto esta solución:
Código Delphi
[-]
var
Start: Integer;
begin
Start := RichEdit1.FindText(FindText, 0, Length(RichEdit1.Text), []);
if Start <> -1 then
begin
RichEdit1.SelStart := Start;
RichEdit1.SelLength := Length(FindText);
RichEdit1.SelText := ReplaceText;
end;
end;
donde FindText es el texto a buscar y ReplaceText el texto para reemplazar.
Lo que esto hace es usar el método FindText del RichEdit para encontrar el texto, lo selecciona y lo reemplaza usando SelText.
// Saludos