您的位置:首页 > 其它

RichEdit中添加链接

2007-05-31 16:24 519 查看
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Shellapi, RichEdit;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
RichEdit2: TRichEdit;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure InitRichEditURLDetection(RE: TRichEdit);
procedure WndProc(var Msg: TMessage); override;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
begin
InitRichEditURLDetection(RichEdit1);
s := 'http://www.yesky.com' + #13#10 + '现学现用' + #13#10;
RichEdit1.Text := s;
s := 'http://www.yesky.com' + #13#10 + 'mailto:software@chinabyte.com';
RichEdit2.Text := s;
end;

//这个是我们自定义的InitRichEditURLDetection过程
//它是最关键的一步

procedure TForm1.InitRichEditURLDetection(RE: TRichEdit);
var
mask: Word;
a: TtextAttributes;
begin

mask := SendMessage(RE.Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RE.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
SendMessage(RE.Handle, EM_SETTARGETDEVICE, 0, 0);
//SendMessage(RE.Handle, EM_AUTOURLDETECT, Integer(True), 0);
// SendMessage(RE.Handle, EM_GETTEXTEX, 0, 0);
//a := TtextAttributes.Create(RE, atSelected);
//a.Color := clRed;
end;

//Form的WndProc过程
procedure TForm1.WndProc(var Msg: TMessage);
var
p: TENLink;
sURL: string;
CE: TRichEdit;
begin
if (Msg.Msg = WM_NOTIFY) then
begin
if (PNMHDR(Msg.lParam).code = EN_LINK) then
begin
p := TENLink(Pointer(TWMNotify(Msg).NMHdr)^);
if (p.Msg = WM_LBUTTONDOWN) then
begin
try
CE := TRichEdit(Form1.ActiveControl);
SendMessage(CE.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
sURL := CE.SelText;
form1.Caption := sURL;
//ShellExecute(Handle, 'open', PChar(sURL), 0, 0, SW_SHOWNORMAL);
except
end;
end;
end;
end;
inherited;
end;

//此处可以为任意文本添加链接
procedure TForm1.Button1Click(Sender: TObject);
var
cf2: CHARFORMAT2;
// st : TSearchTypes;
iPos : integer;
begin
{
RichEdit1.SelStart := 0;
RichEdit1.SelLength := 4;
ZeroMemory(@cf2, sizeof(CHARFORMAT2));
cf2.cbSize := sizeof(CHARFORMAT2);
cf2.dwMask := CFM_LINK;
cf2.dwEffects := CFE_LINK;
RichEdit1.Perform(EM_SETCHARFORMAT, SCF_SELECTION, integer(@cf2));
RichEdit1.SelStart := length(Richedit1.Text);
}

fillchar(cf2, sizeof(CHARFORMAT2),0);//
cf2.cbSize:= sizeof(CHARFORMAT2);
cf2.dwMask:= CFM_LINK;
cf2.dwEffects:= cf2.dwEffects or CFE_LINK or CFE_HIDDEN;
// RichEdit1 给特定的文本加上链接
// iPos := RichEdit1.FindText('现学现用',0,Length('现学现用'),[stWholeWord]);
SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT, SCF_USEUIRULES, integer(@cf2));

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

end.

{
不知道这周的事情会不会顺利,总有种感觉,可能会发生些什么事.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: