上网找了老半天,都是浪费时间,还有80分,如果想要的话,我可以都给,
问题是:在RichEdit中,怎样打开下面的连接,在OICQ中可以,只要点击就行,不用多说了吧,请您给我答案,最好使用代码实现
http://expert.csdn.net/Expert/PostNew.asp?room=5301
问题是:在RichEdit中,怎样打开下面的连接,在OICQ中可以,只要点击就行,不用多说了吧,请您给我答案,最好使用代码实现
http://expert.csdn.net/Expert/PostNew.asp?room=5301
解决方案 »
- QuickRep预览时没有数据
- [请大家指教]类
- 遇到问题:richedit 中对超长字符的处理,请各位高手帮忙
- 关于在listview中根据caption(文件名)显示文件图标
- 为什么连接vfp数据库出现错误?
- 请问用DBEdit1控件如何录入数据?
- 关于QReport显示问题,急,在线等待__快速结帖,感谢!!!
- access voilation at address 77d82074 in module rpcrt4.dll read of address 00000000
- 一个菜鸟问题,搞定给分!
- 请教一个中间层的问题
- 如何在使用Quick report的程序中设置打印机,选择打印机
- Sql的执行效率,哪种写法更高?
CF:TCharFormat;
begin
FillChar(CF, SizeOf(CF), 0);
CF.cbSize := SizeOf(CF);
CF.dwMask := CFM_LINK;
CF.dwEffects := CFE_LINK;
SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT,SCF_ALL,Integer(addr(CF)));
end;
通过子类化获取EM_SETEVENTMASK消息,lParam=ENM_LINK,处理鼠标事件
其次,怎样子类化EM_SETEVENTMASK消息?
再次,如何处理鼠标事件?
我要是明白就不问了,请您详细解答,谢谢
protected
procedure CNNotify(var Msg: TWMNotify); message CN_NOTIFY;
public
constructor Create(AOwner: TComponent); override;
end;var
Form1: TForm1;
RichEditEx: TRichEditEx;procedure TRichEditEx.CNNotify(var Msg: TWMNotify);
type
PENLink=^TENLink;
var
TR: TTextRangeA;
begin
if (Msg.NMHdr.code = EN_LINK) and (PENLink(Msg.NMHdr).Msg = WM_LBUTTONUP) then
begin
TR.chrg := PENLink(Msg.NMHdr).chrg;
GetMem(TR.lpStrText, TR.chrg.cpMax - TR.chrg.cpMin + 2);
SendMessage(Handle, EM_GETTEXTRANGE, 0, Integer(addr(TR)));
ShellExecute(Handle,nil,TR.lpStrText,nil,nil,0);
FreeMem(TR.lpStrText);
end;
end;constructor TRichEditEx.Create(AOwner: TComponent);
begin
inherited;
Self.Text:='http://www.csdn.net';
end;procedure TForm1.FormCreate(Sender: TObject);
var
CF:TCharFormat;
begin
RichEditEx:=TRichEditEx.Create(Self);
RichEditEx.Parent:=Self;
FillChar(CF, SizeOf(CF), 0);
CF.cbSize := SizeOf(CF);
CF.dwMask := CFM_LINK;
CF.dwEffects := CFE_LINK;
SendMessage(RichEditEx.Handle, EM_SETCHARFORMAT,SCF_ALL,Integer(addr(CF)));
SendMessage(RichEditEx.Handle, EM_SETEVENTMASK,0,ENM_LINK);
end;
我对例子进行了简单的测试,问题如下
1、只有在窗体建立后第一次点击超连接按钮时,可以找到超连接,如果在其中添加了文本或第二次点击时,无法找到超连接,
2、我是相当鼠标移动到超连接上面时,自动显示可以上网的那种标志,就像QQ一样的,当然,如果第一条解决了,第二条可以实现,
最后,我想在文本中编辑的不只是超连接,还有文本,和QQ很类似的那种,怎么说呢,你的解答给了我很多思路,可和我的想法还有距离。
RichEditEx.SelStart := 4;
RichEditEx.SelLength := 19;注意这个?
这是什么意思?那该怎么做呢?不用提示了吧?Pos('http://',Text)处理其他鼠标动作也就是处理其它消息
RichEditEx.SelStart := 4;
RichEditEx.SelLength := 19;注意这个?
这是什么意思?那该怎么做呢?不用提示了吧?Pos('http://',Text)处理其他鼠标动作也就是处理其它消息