Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在TRichEdit中设置EM_AUTOURLDETECT后如何检测URL链接?_Delphi_Winapi_Url_Detection_Trichedit - Fatal编程技术网

Delphi 在TRichEdit中设置EM_AUTOURLDETECT后如何检测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

我正在尝试使用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);
  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的方法是重新创建调用