Windows has an API function HideCaret to do this job:
function HideCaret(wnd: hwnd): boolean;
You can apply this function in then RichEdit control's event. The
following example will hide the caret after any key is released.
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
hidecaret(richedit1.handle);
end;
You can also use this function in another event of the richedit, like
OnEnter...