我正在尝试使用EM_AUTOURLDETECT消息为TRichEdit组件实现URL检测.
我有以下代码的问题
我有以下代码的问题
procedure TForm1.Button1Click(Sender: TObject); var Mask: Word; begin Mask := SendMessage(Handle,EM_GETEVENTMASK,0); SendMessage(Handle,EM_SETEVENTMASK,Mask or ENM_LINK); SendMessage(Handle,EM_AUTOURLDETECT,Integer(True),0); end;
它虽然有效,但我必须在这些设置之后更改TRichEdit的文本,以使其检测已写入文本中的URL.这就是问题,因为我的TRichEdit在应用此功能时处于ReadOnly模式.
执行此代码后,如何强制TRichEdit检测已写入文本中的URL,我该怎么办?
我在看documentation,但没有提到这样的事情.
谢谢
解决方法
我前段时间遇到了同样的问题并使用了(相当)一个肮脏的解决方法.
发送
发送
EM_AUTOURLDETECT
消息后,我得到并存储当前选择,然后(重新)设置富编辑的文本并设置之前存储的选择.
procedure TForm1.Button1Click(Sender: TObject); var EventMask: Word; CharRange: TCharRange; begin EventMask := SendMessage(RichEdit1.Handle,0); SendMessage(RichEdit1.Handle,EventMask or ENM_LINK); SendMessage(RichEdit1.Handle,WPARAM(True),EM_EXGETSEL,LPARAM(@CharRange)); SendMessage(RichEdit1.Handle,WM_SETTEXT,LPARAM(RichEdit1.Text)); SendMessage(RichEdit1.Handle,EM_EXSETSEL,LPARAM(@CharRange)); end;