首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

在 RichEdit 中實現超連結自動偵測與點擊開啟 (C++ Builder)

     編輯:VC 教學

核心步驟

  1. 啟用 RichEdit 的連結事件通知 (ENM_LINK) 與自動 URL 偵測 (EM_AUTOURLDETECT)。
  2. 重載表單 WndProc 攔截 WM_NOTIFY,處理 EN_LINK 通知。
  3. 滑鼠左鍵按下 (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";
}

WndProc 重載


// .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 正常運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved