Delphi 在TRichEdit中设置EM_AUTOURLDETECT后如何检测URL链接?
我正在尝试使用EM_AUTOURLDETECT消息为TRichEdit组件实现URL检测。Delphi 在TRichEdit中设置EM_AUTOURLDETECT后如何检测URL链接?,delphi,winapi,url,detection,trichedit,Delphi,Winapi,Url,Detection,Trichedit,我正在尝试使用EM_AUTOURLDETECT消息为TRichEdit组件实现URL检测。 我对以下代码有问题 procedure TForm1.Button1Click(Sender: TObject); var Mask: Word; begin Mask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0); SendMessage(Handle, EM_SETEVENTMASK, 0, Mask or ENM_LINK); SendMes
我对以下代码有问题
procedure TForm1.Button1Click(Sender: TObject);
var Mask: Word;
begin
Mask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(Handle, EM_SETEVENTMASK, 0, Mask or ENM_LINK);
SendMessage(Handle, EM_AUTOURLDETECT, Integer(True), 0);
end;
虽然它可以工作,但在这些设置之后,我必须更改TRichEdit的文本,以获得在已经编写的文本中检测URL的信息。这就是问题所在,因为应用此功能时,我的TRichEdit处于只读模式。执行此代码后,我应该如何强制TRichEdit检测已编写文本中的URL?
我在看报纸,但是没有提到类似的事情
谢谢你我不久前也遇到了同样的问题,并且(相当)使用了一个肮脏的解决方法。 发送消息后,我获取并存储当前选择,然后(重新)设置rich edit的文本,并将之前存储的选择设置回原处
procedure TForm1.Button1Click(Sender: TObject);
var
EventMask: Word;
CharRange: TCharRange;
begin
EventMask := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, EventMask or ENM_LINK);
SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, WPARAM(True), 0);
SendMessage(RichEdit1.Handle, EM_EXGETSEL, 0, LPARAM(@CharRange));
SendMessage(RichEdit1.Handle, WM_SETTEXT, 0, LPARAM(RichEdit1.Text));
SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LPARAM(@CharRange));
end;
谢谢TLama,但是没有更干净的技术吗?某种单一通知?在文档中有如下内容:如果启用了自动URL检测,富编辑控件将扫描任何修改过的文本,以确定文本是否与URL的格式匹配。因此,似乎应该修改文本以获得此格式,但如果有更简单的方法(如您所说的一些通知)强制系统对rich edit中已经存在的所有单词应用
CFE_LINK
效果,我不知道。没有其他解决方法。简化的代码是:SendMessage(RichEdit1.Handle,WM_SETTEXT,0,Longint(RichEdit1.Text))代码>设置EM\u AUTOURLDETECT
@kobik后,您说得对,谢谢。而且它看起来会更时尚。我会在回答中加上理由;)我认为VCL的方法是重新创建调用