在RichEdit中自动侦测Url

时间:2010-01-27 09:04:09  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:,然后他叫起来:"就是它!我们也要实现这种效果!"于是我开始考虑哪个控件比较合适用来实现这种效果。我只想到RichEdit。效果有三个要素:1、 必须能检测到URL。2、必须能检测到鼠标在URL上的移动,变化鼠标指针。3、 URL被点击时,要启动IE,启动正确的页面。实现代码如下:
  正文:

有一回我在Microsoft word里面写一个程序文档,当我输入"http://"的时候,这几个字被高亮显示了。完成网址输入后,甚至还加上了下划线。我把鼠标移到URL上,指针变成了手形。点击之后,IE窗口出现了,并把我带到那个站点。当时我老板看到了这一幕,然后他叫起来:"就是它!我们也要实现这种效果!"

于是我开始考虑哪个控件比较合适用来实现这种效果。我只想到RichEdit。效果有三个要素:
1、 必须能检测到URL。
2、必须能检测到鼠标在URL上的移动,变化鼠标指针。
3、 URL被点击时,要启动IE,启动正确的页面。

实现代码如下:



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls,shellapi,Richedit;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure WndProc(var Message: TMessage); override;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Message: TMessage);
var p: TENLink;
strURL: string;
begin
  if (Message.Msg = WM_NOTIFY) then begin
    if (PNMHDR(Message.lParam).code = EN_LINK) then begin
      p := TENLink(Pointer(TWMNotify(Message).NMHdr)^);
      if (p.Msg = WM_LBUTTONDOWN) then begin
        SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
        strURL := RichEdit1.SelText;
        ShellExecute(Handle, 'open', PChar(strURL), 0, 0, SW_SHOWNORMAL);
      end;
    end;
  end;
  inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
var mask: Word;
begin
  mask := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0);
  SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
  SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0);
  RichEdit1.Text := 'Scalabium Software'#13#10 +
  ' Site is located at program.tommsoft.com. Welcome to our site.';
end;

end.

"在RichEdit中自动侦测Url"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/2010-01-27/12454.html


关键字:

关于《在RichEdit中自动侦测Url》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td