RichEdit超链接
2011-11-21 10:25
274 查看
原文:http://ccrun.com/
首先在Form上放置一个RichEdit。
在窗体的构造函数中添加以下代码:
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
unsigned mask = SendMessage(RichEdit1->Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK);
SendMessage(RichEdit1->Handle, EM_AUTOURLDETECT, true, 0); //自动检测URL
RichEdit1->Text = "欢迎访问C++ Builder\n"
"网址: http://www.ccrun.com\n" "偶的信箱:\n"
"mailto::info@ccrun.com \n"
"嘿嘿\n";
}
重载窗体的WndProc
1。在.h中添加:
protected:
virtual void __fastcall WndProc(Messages::TMessage &Message);
2。在.cpp中添加:
//---------------------------------------------------------------------------
void __fastcall TMainForm::WndProc(Messages::TMessage &Message)
{
if (Message.Msg == WM_NOTIFY)
{
if (((LPNMHDR)Message.LParam)->code == EN_LINK)
{
ENLINK* p = (ENLINK *)Message.LParam;
if (p->msg == WM_LBUTTONDOWN)
{
SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(p->chrg));
ShellExecute(Handle, "open", RichEdit1->SelText.c_str(), 0, 0, SW_SHOWNORMAL);
}
}
}
TForm::WndProc(Message);
}
设置任意字符串为超链接
void SetLink(bool bEnabled)
{
::CHARFORMAT2 cf;
ZeroMemory(&cf, sizeof(::CHARFORMAT2));
cf.cbSize = sizeof(::CHARFORMAT2);
cf.dwMask = CFM_LINK;
bEnabled?(cf.dwEffects |= CFE_LINK):(cf.dwEffects &= ~CFE_LINK);
SendMessage(Form1->RichEdit1->Handle,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
RichEdit1->Clear();
RichEdit1->Text="接收或拒绝";
int start=RichEdit1->Text.Pos("接收");
RichEdit1->SelStart=start-1;
RichEdit1->SelLength=4;
SetLink(true);
unsigned mask = SendMessage(RichEdit1->Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessage &msg)
{
if(msg.Msg==WM_NOTIFY)
{
if (((LPNMHDR)msg.LParam)->code == EN_LINK)
{
ENLINK* p = (ENLINK *)msg.LParam;
if (p->msg == WM_LBUTTONDOWN)
{
SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(p->chrg));
ShowMessage(RichEdit1->SelText);
}
}
}
else
{
TForm::WndProc(msg);
}
}
首先在Form上放置一个RichEdit。
在窗体的构造函数中添加以下代码:
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
unsigned mask = SendMessage(RichEdit1->Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK);
SendMessage(RichEdit1->Handle, EM_AUTOURLDETECT, true, 0); //自动检测URL
RichEdit1->Text = "欢迎访问C++ Builder\n"
"网址: http://www.ccrun.com\n" "偶的信箱:\n"
"mailto::info@ccrun.com \n"
"嘿嘿\n";
}
重载窗体的WndProc
1。在.h中添加:
protected:
virtual void __fastcall WndProc(Messages::TMessage &Message);
2。在.cpp中添加:
//---------------------------------------------------------------------------
void __fastcall TMainForm::WndProc(Messages::TMessage &Message)
{
if (Message.Msg == WM_NOTIFY)
{
if (((LPNMHDR)Message.LParam)->code == EN_LINK)
{
ENLINK* p = (ENLINK *)Message.LParam;
if (p->msg == WM_LBUTTONDOWN)
{
SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(p->chrg));
ShellExecute(Handle, "open", RichEdit1->SelText.c_str(), 0, 0, SW_SHOWNORMAL);
}
}
}
TForm::WndProc(Message);
}
设置任意字符串为超链接
void SetLink(bool bEnabled)
{
::CHARFORMAT2 cf;
ZeroMemory(&cf, sizeof(::CHARFORMAT2));
cf.cbSize = sizeof(::CHARFORMAT2);
cf.dwMask = CFM_LINK;
bEnabled?(cf.dwEffects |= CFE_LINK):(cf.dwEffects &= ~CFE_LINK);
SendMessage(Form1->RichEdit1->Handle,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
RichEdit1->Clear();
RichEdit1->Text="接收或拒绝";
int start=RichEdit1->Text.Pos("接收");
RichEdit1->SelStart=start-1;
RichEdit1->SelLength=4;
SetLink(true);
unsigned mask = SendMessage(RichEdit1->Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessage &msg)
{
if(msg.Msg==WM_NOTIFY)
{
if (((LPNMHDR)msg.LParam)->code == EN_LINK)
{
ENLINK* p = (ENLINK *)msg.LParam;
if (p->msg == WM_LBUTTONDOWN)
{
SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(p->chrg));
ShowMessage(RichEdit1->SelText);
}
}
}
else
{
TForm::WndProc(msg);
}
}
相关文章推荐
- MFC应用---超链接RichEdit
- 在 wxWidgets 中使用 RichEdit 及超链接自动识别
- richedit实现超链接
- richedit实现超链接
- 43.VC(custom)-richedit实现超链接(随手代码)
- RichEdit中支持超链接的实现
- 在RichEdit中实现超链接
- 在RichEdit中使用超链接
- MFC应用---超链接RichEdit
- RichEdit中加超链接
- 在 wxWidgets 中使用 RichEdit 及超链接自动识别
- Richedit实现超链接
- Richedit使用大全
- RichEdit中插入GIF动画(使用QQ的ImageOle.dll)
- 关于RICHEDIT的两个问题
- 一种快速刷新richedit中内嵌动画的方法的实现
- 在RichEdit中插入Bitmap/GIF动画以及获取这些元素的信息的方法
- 给激活了WS_HSCROLL,WS_VSCROLL的RichEdit增加自动换行的控制(转)
- RichEdit中插入GIF动画(使用QQ的ImageOle.dll)
- RichEdit 使用