人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

Delphi中為RichEdit加入鏈接

Delphi中為RichEdit加入鏈接

更新時(shí)間:2022-07-20 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

  隨著網(wǎng)絡(luò)的深入應(yīng)用,各種軟件都增加了一些網(wǎng)絡(luò)功能,常用的文本編輯器也出現(xiàn)了這樣的一種功能,當(dāng)你把一個(gè)網(wǎng)址輸入完畢后,網(wǎng)址由黑色變成了帶下劃線的寶藍(lán)色,點(diǎn)擊之后,你的缺省Web瀏覽器將會(huì)被啟動(dòng),顯示出該URL所標(biāo)識(shí)的網(wǎng)站內(nèi)容;而如果你輸入的是“mailto:webmaster@yesky.com”那么你的缺省電子郵件程序?qū)⒈淮蜷_(kāi),這樣你就能通過(guò)一個(gè)使用文本編輯器來(lái)發(fā)送電子郵件了。

  這個(gè)看似神奇的功能,不需用第三方VCL組件就能搞定(據(jù)網(wǎng)上的“大牛”們說(shuō),第三方組件用多了,大腦會(huì)因長(zhǎng)期得不到思考而逐漸退化成大猩猩的程度,所以盡量少用)。TRichEidt是Delphi提供的一個(gè)非常有用的VCL組件(你可以在Delphi的組件面板的Win32標(biāo)簽頁(yè)中找到它),它提供了一個(gè)文本編輯程序的大部分的功能,甚至還可以對(duì)段落進(jìn)行格式化、改變文本的顏色,這樣一來(lái),你完全可以用它制作一個(gè)類似Windows操作系統(tǒng)自帶的寫字板程序,這次我們靠的就是它。

  要實(shí)現(xiàn)超級(jí)鏈接的功能,首先必須解決如何在TRichRdit中對(duì)URL、Mailto等進(jìn)行檢測(cè)的問(wèn)題,還是以實(shí)例開(kāi)始吧,新建一個(gè)Delphi工程,在空白的Form上擺放兩個(gè)TRichRdit組件,組件的名字就用缺省的名字RichEdit1和RichRdit2,對(duì)URL的感知功能的實(shí)現(xiàn)思路是:

  1、發(fā)送一個(gè)消息(EM_GETEVENTMASK)給RichEdit組件,獲取事件模板(EventMask),它將會(huì)指定哪一個(gè)消息通知(notification)將被發(fā)送到給父窗口。

  2、發(fā)送一個(gè)包含ENM_LINK標(biāo)志的EM_SETEVENTMASK消息給EichEdit,ENM_LINK將被包含在Mask中,當(dāng)鼠標(biāo)單擊ULR時(shí)EN_LINK消息將被發(fā)送。

  3、發(fā)送EM_AUTOURLDETECT消息給RichEdit,EM_AUTOURLDETECT消息將會(huì)自動(dòng)檢測(cè)URL。
然后,我們來(lái)解決URL高亮顯示的問(wèn)題。

  在我們剛剛建立的程序中找到RichEdit1組件,進(jìn)入它的OnCreate事件,在該事件中加入一個(gè)自定義的InitRichEditURLDetection過(guò)程,以便能夠在程序啟動(dòng)時(shí)就觸發(fā)它;RichEdit2組件的OnCreate事件則不加入InitRichEditURLDetection過(guò)程,讓兩者比較一下效果,代碼如下所示:

//這個(gè)是我們自定義的InitRichEditURLDetection過(guò)程
//它是最關(guān)鍵的一步
procedure TForm1.InitRichEditURLDetection(RE: TRichEdit);
 var
  mask: Word;
 begin
  mask := SendMessage(RE.Handle, EM_GETEVENTMASK, 0, 0);
  SendMessage(RE.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
  SendMessage(RE.Handle, EM_AUTOURLDETECT, Integer(True), 0);
 end;
 //這是FormCreate事件,它加入了我們自定義的過(guò)程
 //使得程序一運(yùn)行就出現(xiàn)我們想要實(shí)現(xiàn)的效果
 procedure TForm1.FormCreate(Sender: TObject);
  var
   s: string;
  begin
   InitRichEditURLDetection(RichEdit1);

   s:='http://www.yesky.com' + #13#10 +
   'mailto:software@chinabyte.com';
   RichEdit1.Text := s;

   s:= 'http://www.yesky.com' + #13#10 +
   'mailto:software@chinabyte.com';
   RichEdit2.Text := s
end;


  最后我們來(lái)實(shí)現(xiàn)鼠標(biāo)單擊后自動(dòng)調(diào)用瀏覽器或郵件程序的功能,我們用覆蓋(Override)Form的WndProc方法來(lái)捕獲EN_LINK消息,然后我們用ShellExecute過(guò)程來(lái)啟動(dòng)缺省的瀏覽器,代碼如下所示:

//Form的WndProc過(guò)程
procedure TForm1.WndProc(var Msg: TMessage);
 var
  p: TENLink;
  sURL: string;
  CE : TRichEdit;
 begin
  if (Msg.Msg = WM_NOTIFY) then
  begin
   if (PNMHDR(Msg.lParam).code = EN_LINK) then
   begin
    p := TENLink(Pointer(TWMNotify(Msg).NMHdr)^);
    if (p.Msg = WM_LBUTTONDOWN) then
    begin
    try
     CE := TRichEdit(Form1.ActiveControl);
     SendMessage(CE.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
     sURL := CE.SelText;
     ShellExecute(Handle, 'open', PChar(sURL), 0, 0, SW_SHOWNORMAL);
    except
    end;
   end;
  end;
 end;
 inherited;
end;


  主要的代碼都列出來(lái)了,最后程序的效果如下圖,由兩個(gè)Richedit的比較不難看出區(qū)別。在看到別人程序中的一些技術(shù)亮點(diǎn)的時(shí)候,不妨多思考一下如何用現(xiàn)有的組件來(lái)解決,這也是一個(gè)提高水平的好機(jī)會(huì),一味等待第三方VCL組件,可能真的會(huì)使你成為一只大猩猩的。


溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 平远县| 含山县| 武汉市| 论坛| 本溪市| 鲁甸县| 杭锦后旗| 永和县| 建湖县| 东阳市| 新泰市| 常山县| 理塘县| 道孚县| 金寨县| 巴彦淖尔市| 依兰县| 水富县| 积石山| 宝丰县| 和田市| 龙江县| 海盐县| 夹江县| 库伦旗| 富裕县| 屏南县| 红安县| 合阳县| 岗巴县| 枣强县| 利辛县| 沙河市| 宁城县| 新营市| 师宗县| 绿春县| 老河口市| 古田县| 白朗县| 临漳县|