C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[771] [Controls] RichEdit (리치에디터)에 HyperLink 걸기
장성호 [nasilso] 10105 읽음    2008-05-22 03:08
참조
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="";
}
//---------------------------------------------------------------------------



그럼..

+ -

관련 글 리스트
771 [Controls] RichEdit (리치에디터)에 HyperLink 걸기 장성호 10105 2008/05/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.