提问:如何在RichEidt中单击URL连接时,并打开浏览器转到相应的网页上?

这个网站不安全啊 2002-08-27 10:54:00
如何在RichEidt中单击URL连接时,响应此LBUTTONUP事件,并打开浏览器转到相应的网页上,就象在Word中你输入一个URL地址,之后单击它就可以转到相应的页面上。
谢谢各位高手。
...全文
109 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huzhangyou 2002-09-02
  • 打赏
  • 举报
回复
见笑了
ENLINK原来是msdn上的一个struct
呵呵
huzhangyou 2002-09-02
  • 打赏
  • 举报
回复
忘了我是在memo的click事件中实现的
huzhangyou 2002-09-02
  • 打赏
  • 举报
回复
请问楼主ENLINK这个类是你自己写的吗?
我好像也有一个方法
应该是差不多
int Row=SendMessage(Memo1->Handle,EM_LINEFROMCHAR, Memo1->SelStart, 0);
if(Row==15)
{
String TmpStr3=buffer+"\\"+"插件\\ie.exe";
ShellExecute(NULL,"open",TmpStr3.c_str(),NULL,NULL,SW_SHOW);}

不过这是MEMO的
而且我自己制定的行
方法可能不怎么好
(buffer是string类型)
  • 打赏
  • 举报
回复
问题我已经解决了!虽然大家没能帮上我的忙,但是我非常的感谢大家。每人我都会给分的。还有下面是我的解决方法。请要解决这个问题的朋友参考一下,一定会有帮助的!
一、首先对RichEdit发送以下消息
::SendMessage( RichEdit->Handle, EM_AUTOURLDETECT, (WPARAM)TRUE, 0 );
::SendMessage( RichEdit->Handle, EM_SETEVENTMASK, 0,
(LPARAM)(::SendMessage(RichEdit->Handle, EM_GETEVENTMASK,0,0) | ENM_LINK));

二、在头文件(*.h)中声明函数:
void __fastcall SubClassWndProc(Messages::TMessage &Msg);

三、然后在构造函数中加 WindowProc = SubClassWndProc;
四、SubClassWndProc的代码:
void __fastcall TmyForm::SubClassWndProc(Messages::TMessage &Msg)

{
Msg.Result = 0;

if (Msg.Msg == WM_NOTIFY)
{
LPNMHDR pnmh = (LPNMHDR)Msg.LParam;
if (pnmh->code == EN_LINK)
{
ENLINK* l_pENLink = ( ENLINK* )pnmh;
switch( l_pENLink->msg)
{
case WM_LBUTTONDOWN:
RichEdit->SelStart = l_pENLink->chrg.cpMin;
RichEdit->SelLength = l_pENLink->chrg.cpMax-l_pENLink->chrg.cpMin;
Cursor = crHourGlass;
::ShellExecute(Handle, "open", RichEdit->SelText.c_str(), NULL, NULL, SW_SHOWNORMAL);
Cursor = crDefault;
break;
}
}
}
WndProc(Msg);
}
  • 打赏
  • 举报
回复
不好意思大哥,在我这里接收不到这个消息啊!EM_AUTOURLDETECT
kingcaiyao 2002-08-27
  • 打赏
  • 举报
回复
消息映射在头文件中:
.h File
class TForm1:public TForm
{
private:
void __fastcall MyMessage(TMessage &myMsg);
public:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(EM_AUTOURLDETECT,TMessage,MyMessage);
END_MESSAGE_MAP(TForm);
};


bluebird97073 2002-08-27
  • 打赏
  • 举报
回复

直接写mousedown就可以了哈
void __fastcall TForm1::RichEdit1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Shift.Contains(ssLeft))
ShellExecute(Handle,"open",RichEdit1->SelText.c_str(),0,0,SW_SHOW);
}
  • 打赏
  • 举报
回复
谢谢大家帮我的忙,但是请问 kingcaiyao(AKing) 一下,你的
void TForm1::MyMessage(TMessage &myMsg)
是如何定义的?是接收处理WM_NOTIFY消息吗?请把你的消息映射那部份代码也给我好吗?
在这里谢了先
kingcaiyao 2002-08-27
  • 打赏
  • 举报
回复
这样:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(SendMessage(
RichEdit1->Handle, // handle to destination window
EM_AUTOURLDETECT, // message to send
TRUE, // not used; must be zero
0 // not used; must be zero
)==0)Caption="ok1";
SendMessage(RichEdit1->Handle,EM_SETEVENTMASK ,0,
ENM_LINK|SendMessage(RichEdit1->Handle,EM_GETEVENTMASK,0,0));

RichEdit1->Lines->Add("http://www.csdn.net");
}
//---------------------------------------------------------------------------
void TForm1::MyMessage(TMessage &myMsg)
{
LPNMHDR lpNmhdr = (LPNMHDR)myMsg.LParam;
if (lpNmhdr->code==EN_LINK)
{
ENLINK* lpENLink = ( ENLINK* )lpNmhdr ;
if (lpENLink->msg == WM_LBUTTONDOWN)
{
RichEdit1->SelStart=lpENLink->chrg.cpMin;
RichEdit1->SelLength=lpENLink->chrg.cpMax-lpENLink->chrg.cpMin;

ShellExecute(Handle,"Open",RichEdit1->SelText.c_str(),0,0,SW_SHOW);

}


}

}

我不懂电脑 2002-08-27
  • 打赏
  • 举报
回复
用TCppWebBrowser
jianlinlong 2002-08-27
  • 打赏
  • 举报
回复
去 www.codelphi.com 看看,里面有一篇文章正好是,不过是 delphi 的

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧