ENM_LINK) 與自動 URL 偵測 (EM_AUTOURLDETECT)。WndProc 攔截 WM_NOTIFY,處理 EN_LINK 通知。WM_LBUTTONDOWN) 時,取得選取文字並用 ShellExecute 開啟。__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);
RichEdit1->Text =
"歡迎訪問 C++ Builder\n"
"網址: https://www.ccrun.com\n"
"偶的信箱:\n"
"mailto:[email protected]\n"
"嘿嘿\n";
}
// .h 檔宣告
protected:
virtual void __fastcall WndProc(Messages::TMessage &Message);
// .cpp 檔實作
void __fastcall TMainForm::WndProc(Messages::TMessage &Message)
{
if (Message.Msg == WM_NOTIFY) {
LPNMHDR hdr = (LPNMHDR)Message.LParam;
if (hdr->code == EN_LINK) {
ENLINK *enl = (ENLINK*)Message.LParam;
if (enl->msg == WM_LBUTTONDOWN) {
// 設定選取範圍為連結文字
SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(enl->chrg));
// 執行開啟 (http、mailto、檔案路徑等)
ShellExecute(Handle, "open", RichEdit1->SelText.c_str(), 0, 0, SW_SHOWNORMAL);
}
}
}
TForm::WndProc(Message); // 傳遞給基類
}
RichEdit 內的網址、電子郵件、檔案路徑會自動變為底線藍字 (超連結樣式),使用者點擊即啟動瀏覽器、郵件用戶端或總管。已測試可在 BCB6 正常運行。