----- 在網(wǎng)絡(luò)程序中,我們常常碰到需要用戶輸入ip地址的情況。然而Delphi并沒(méi)有為我們提供可以用于輸入IP串的控件,于是我們只好用Tedit控件(單行文本框)來(lái)接受用戶輸入的IP串。但是,使用Tedit來(lái)輸入IP串并不是一個(gè)好的主意,因?yàn)樘幚砥饋?lái)非常不方便。事實(shí)上,在我們的身旁有一個(gè)專門用來(lái)輸入IP串的Windows控件,該控件如圖所示。IP控件會(huì)拒絕非法的IP串(在每個(gè)部分只能輸入0..255之間的數(shù)字);它讓你可以輕松地獲取控件中的IP串所對(duì)應(yīng)的IP值(32位整數(shù)),這省去了IP串和IP值之間相互轉(zhuǎn)換的麻煩;此外,你還能限制IP控件中所能輸入的IP的范圍。在本文中,我將向大家介紹如何在我們的Delphi程序中使用Windows的IP控件。
---- Windows中有兩個(gè)非常重要的動(dòng)態(tài)聯(lián)結(jié)庫(kù):commctrl.dll和comctl32.dll,它們是Windows的自定義控制庫(kù)(Windows Common Controls)。自定義控制庫(kù)中包含了許多常用的Windows控件,如Statusbar,Coolbar,HotKey等;在Delphi中,這些控件大多數(shù)都已被包裝成可視化控件了。在Microsoft推出Internet Explorer 3之后,自定義控制庫(kù)中新增了一些控件,其中就包括Windows的IP控件(IP Address edit control)。
---- 初始化Windows自定義控制庫(kù)
---- Windows提供了兩個(gè)API函數(shù),InitCommonControls和InitCommonControlsEx,用來(lái)初始化自定義控制庫(kù)。從名字我們不難看出這兩個(gè)API函數(shù)的關(guān)系:后者是前者的增強(qiáng)。如果你希望在程序中使用IP控件,你必須用InitCommonControlsEx來(lái)完成對(duì)自定義控制庫(kù)以及類的初始化。函數(shù)InitCommonControlsEx的原型如下(Pascal語(yǔ)法):
---- ... ...
---- 創(chuàng)建IP控件
---- ... ...
---- 使用IP控件。 在程序中,我們通過(guò)向IP控件發(fā)送消息來(lái)與它通訊。IP控件可以響應(yīng)的消息有以下6個(gè),這些消息及它們的含義,見下表:
---- ... ...
---- 若想要獲取IP控件中IP串所對(duì)應(yīng)的IP值,你應(yīng)該向IP控件發(fā)送IPM_GETADDRESS消息,并且需要把一個(gè)32位整數(shù)的地址作為SendMessage的最后一個(gè)參數(shù)。
---- ... ...
---- IP控件的通知消息
---- 當(dāng)IP串被改動(dòng)后或者輸入焦點(diǎn)發(fā)生了轉(zhuǎn)移,IP控件就會(huì)向它的父窗口發(fā)送通知消息IPN_FIELDCHANGED。在大多數(shù)情況下,我們都可以忽略此通知消息。以下是處理通知消息IPN_FIELDCHANGED的一個(gè)示例:
PRocedure Tform1.WndProc(var Msg: TMessage);var p:PNMHDR;begininherited; if Msg.Msg=WM_NOTIFYthen begin p:=Pointer(Msg.lParam); if p^.code=IPN_FIELDCHANGED then begin {… 處理IP控件的IPN_FIELDCHANGED通知消息 …} end;end;end;
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注