You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11中TRichEdit组件超链接失效问题求助

Delphi 11中TRichEdit超链接功能失效的原因与解决办法

我之前在升级到Delphi 11时也碰到过一模一样的问题,折腾了好几天终于摸清楚了几个核心原因,给你整理一下可行的解决思路:

1. 原生TRichEdit的功能升级冲突

Delphi 11的VCL对TRichEdit做了增强,原生就支持超链接的识别与点击事件(比如新增了OnURLClick事件、SelURL属性),而你之前用线程实现的自定义逻辑,很可能和这些原生功能产生了冲突——旧代码的消息拦截、句柄操作被新版本的控件逻辑覆盖了。

解决办法:

  • 先移除之前的线程处理代码,直接用原生功能:
    1. 确保TRichEdit的HideSelection属性设为True;
    2. 给OnURLClick事件绑定处理函数,直接在事件里处理链接跳转;
    3. 如果需要手动插入带超链接的文本,可以用SelAttributes设置下划线和蓝色字体,再通过SelURL属性关联对应的网址:
      RichEdit1.SelText := '点击访问示例网站';
      RichEdit1.SelAttributes.Color := clBlue;
      RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsUnderline];
      RichEdit1.SelURL := 'https://example.com';
      

2. 线程操作的安全性管控升级

Delphi 11对VCL控件的跨线程访问管控更严格了,旧版本里你可能直接在子线程中操作TRichEdit的句柄、发送消息,这种非UI线程的操作在新版本中会被系统或VCL的安全机制拦截,导致功能失效。

解决办法:
所有对TRichEdit的操作必须回到主线程执行,用TThread.Synchronize或TThread.Queue包裹操作代码:

TThread.CreateAnonymousThread(
  procedure
  begin
    TThread.Synchronize(nil,
      procedure
      begin
        // 这里写你的TRichEdit操作代码,比如插入超链接文本
      end);
  end).Start;

3. 旧版私有接口/消息的兼容性问题

如果你的旧方法依赖了TRichEdit底层未公开的消息(比如自定义的超链接触发消息)或者私有控件接口,Delphi 11使用的新版riched20.dll(系统Rich Edit控件)可能已经修改或移除了这些接口,导致旧代码无法生效。

解决办法:
改用官方标准的超链接处理方式——通过拦截WM_NOTIFY消息中的EN_LINK通知:

  1. 重载TRichEdit的WndProc方法:
    procedure TForm1.RichEdit1WndProc(var Message: TMessage);
    var
      PNMHdr: PNMHdr;
      PENLink: PENLink;
    begin
      inherited;
      if Message.Msg = WM_NOTIFY then
      begin
        PNMHdr := PNMHdr(Message.LParam);
        if PNMHdr.code = EN_LINK then
        begin
          PENLink := PENLink(Message.LParam);
          if PENLink.msg = WM_LBUTTONDOWN then
          begin
            // 提取并处理点击的链接
            ShowMessage('点击了链接: ' + StrPas(PENLink.item.szUrl));
            Message.Result := 0;
          end;
        end;
      end;
    end;
    
  2. 在Form的OnCreate事件中启用EN_LINK通知:
    SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, ENM_LINK or ENM_MOUSEEVENTS);
    

内容的提问来源于stack exchange,提问作者Nikola Simeonov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:38:11