問一個Windows Message的問題 |
尚未結案
|
beball
一般會員 發表:7 回覆:4 積分:2 註冊:2004-01-02 發送簡訊給我 |
各位好
我在這邊的討論區找到了一段程式碼如下:
他的目的是讓RichEdit可以自動偵測是否為http的文字..
我試了,他是可以偵測沒錯,但是HyperLink(TMessage &Msg)這個函式卻似乎沒有任何作用..
而且我在RichEdit的OnSelectionChange做的事也沒反應了..
有人知道問題是在哪裡嗎? 終於...我自己試出來了,查了MSDN
原來要建立MESSAGE_MAP 來攔截RichEdit 送出的EN_LINK notification
透過 WM_NOTIFY 的msg 就可取得字串
//unit.h
public:
void __fastcall HyperLink(TMessage &Msg); BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_NOTIFY, TMessage, HyperLink)
END_MESSAGE_MAP(TForm) //unit.c
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
SendMessage(RichEdit1->Handle, EM_AUTOURLDETECT, true, NULL);
} void __fastcall TForm1::HyperLink(TMessage &Msg) { ENLINK *PENLINK;
PENLINK=(ENLINK *)Msg.LParam; if (PENLINK->msg == WM_LBUTTONDOWN && PENLINK->nmhdr.code==EN_LINK) { CHARRANGE RG;
RG=PENLINK->chrg; int LStart,LEnd;
LStart=RG.cpMin;
LEnd=RG.cpMax; RichEdit1->SelStart=LStart;
RichEdit1->SelLength=LEnd-LStart; ShowMessage(RichEdit1->SelText); } TForm::Dispatch(&Msg);
} void __fastcall TForm1::FormCreate(TObject *Sender)
{
SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, ENM_LINK);
}
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |