참조
http://www.scalabium.com/faq/dct0146.htm
http://delphi.about.com/od/vclusing/l/aa111803a.htm
http://www.howto.pe.kr/zboard/zboard.php?id=delphi_tiptrick&page=6&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=751
RichEdit에 Url 이나 E-Mail 등에 HyperLink 기능을 거는 방법입니다.
RichEdit를 이용하여 채팅창 같은것을 만들때 쓰일수 있을것 같구..,,
위에 자료를 참조하여 C++Builder 용으로 바꾸어 보았습니다.
//---------------------------------------------------------------------------
TWndMethod OrgProc;
void __fastcall InitRichEditURLDetection(TRichEdit *RE)
{
WORD mask;
mask = SendMessage(RE->Handle, EM_GETEVENTMASK, 0, 0);
SendMessage(RE->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK);
SendMessage(RE->Handle, EM_AUTOURLDETECT, Integer(True), 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
InitRichEditURLDetection(RichEdit1);
OrgProc=this->WindowProc;
this->WindowProc=MyWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyWndProc( TMessage &Msg )
{
String sURL;
TRichEdit *CE;
MSGFILTER * lpMsgFilter = (MSGFILTER *)Msg.LParam;
PNMHdr nh = PNMHdr(Msg.LParam);
ENLINK * el = (ENLINK *)Msg.LParam;
if( (Msg.Msg == WM_NOTIFY) && (nh->code==EN_LINK ) && (lpMsgFilter->msg == WM_LBUTTONDOWN))
{
CE = (TRichEdit *)Form1->ActiveControl;
SendMessage(CE->Handle, EM_EXSETSEL, 0, Longint(&el->chrg));
sURL = CE->SelText;
// ShellExecute(Handle, "open", sURL.c_str(),"", NULL, SW_SHOWNORMAL );
ShellExecute(Handle, "open", "iexplore.exe", sURL.c_str(), NULL, SW_SHOWNORMAL );
}
OrgProc(Msg);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
RichEdit1->Text=RichEdit1->Text+"\r\n"+Memo1->Text;
Memo1->Text="";
}
//---------------------------------------------------------------------------
그럼..
|