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.
{
不知道这周的事情会不会顺利,总有种感觉,可能会发生些什么事.
}
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.
{
不知道这周的事情会不会顺利,总有种感觉,可能会发生些什么事.
}
相关文章推荐
- Richedit中添加图片
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- 关于如何为FormView中的Richedit/Edit添加右键菜单,并响应CTRL+C等快捷键
- duilib richedit 添加文本提示
- 关于如何为FormView中的Richedit/Edit添加右键菜单,并响应CTRL+C等快捷键
- Delphi中如何使右侧的滚动条自动拖到底端以显示 RichEdit 最新添加的文本
- vc6中richedit显示链接的实现
- Richedit中添加图片
- VS2010添加Richedit后出现错误。
- vc6中richedit显示链接的实现
- richedit 中的链接问题
- android:为TextView添加样式——下划线,颜色,设置链接样式及前背景色
- Delphi中RichEdit的奥妙
- [转]Richedit使用大全
- php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
- WP添加请求链接来路 WP7/8(Windows Phone) and Http-Referer and WebClient-referer
- SQLServer添加链接服务器
- 文件链接在MindMapper中是如何添加的
- Richedit中插入图片BMP(BMP,文件),GIF(文件)