Me retracto:
Si es posible cambiar el caret.
Después de algún tiempo de investigación y prueba (2 semanas, nada menos), logré lo que preguntabas, he aquí el código (es para un TMemo pero vale también para un TRichEdit:
Código Delphi
[-]uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
WM_MYMEMO_ENTER = WM_USER + 500;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure Memo1Enter(Sender: TObject) ;
procedure Memo1Exit(Sender: TObject) ;
procedure Memo1Change(Sender: TObject) ;
procedure FormCreate(Sender: TObject);
private
public
b:TBitmap;
procedure WMMYMEMOENTER(var Message: TMessage); message WM_MYMEMO_ENTER;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMMYMEMOENTER(var Message: TMessage) ;
begin
CreateCaret(Memo1.Handle,b.Handle,20,20) ;
ShowCaret(Memo1.Handle);
end;
procedure TForm1.Memo1Enter(Sender: TObject) ;
begin
PostMessage(Handle, WM_MYMEMO_ENTER, 0, 0);
end;
procedure TForm1.Memo1Exit(Sender: TObject) ;
begin
CreateCaret(Memo1.handle,b.Handle,20,20) ;
ShowCaret(Memo1.Handle);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
b:=TBitmap.Create;
b.LoadFromFile('D:\Seguridad\Imágenes\Glyphs\new.bmp');
end;
procedure TForm1.Memo1Change(Sender: TObject) ;
begin
CreateCaret(Memo1.handle,b.Handle,20,20);
ShowCaret(Memo1.Handle);
end;