----- 在網路程式中,我們常常碰到需要使用者輸入ip位址的情況。然而Delphi並沒有為我們提供可以用於輸入IP串的控件,於是我們只好用Tedit控件(單行文字方塊)來接受用戶輸入的IP串。但是,使用Tedit來輸入IP字串並不是一個好的主意,因為處理起來非常不方便。事實上,在我們的身旁有一個專門用來輸入IP串的Windows控件,該控件如圖所示。 IP控制項會拒絕非法的IP串(在每個部分只能輸入0..255之間的數字);它讓你可以輕鬆地取得控制項中的IP串所對應的IP值(32位元整數),這省去了IP串和IP值之間相互轉換的麻煩;此外,你還能限制IP控制項中所能輸入的IP的範圍。在本文中,我將向大家介紹如何在我們的Delphi程式中使用Windows的IP控制項。
---- Windows中有兩個非常重要的動態聯結程式庫:commctrl.dll和comctl32.dll,它們是Windows的自訂控制庫(Windows Common Controls)。自訂控制庫中包含了許多常用的Windows控件,如Statusbar,Coolbar,HotKey等;在Delphi中,這些控制項大多數都已包裝成視覺化控制項了。在Microsoft推出Internet Explorer 3之後,自訂控制庫中新增了一些控制項,其中就包含Windows的IP控制項(IP Address edit control)。
----初始化Windows自訂控制庫
---- Windows提供了兩個API函數,InitCommonControls和InitCommonControlsEx,用來初始化自訂控制庫。從名字我們不難看出這兩個API函數的關係:後者是前者的增強。如果你希望在程式中使用IP控件,你必須用InitCommonControlsEx來完成對自訂控制庫以及類別的初始化。函數InitCommonControlsEx的原型如下(Pascal語法):
---- ... ...
----建立IP控件
---- ... ...
---- 使用IP控制項。 在程式中,我們透過向IP控制項發送訊息來與它通訊。 IP控制項可以回應的訊息有以下6個,這些訊息及它們的意義,請見下表:
---- ... ...
---- 若想要取得IP控制項中IP字串所對應的IP值,你應該向IP控制項傳送IPM_GETADDRESS訊息,並且需要把一個32位元整數的位址當作SendMessage的最後一個參數。
---- ... ...
---- IP控制項的通知訊息
---- 當IP字串被改動後或輸入焦點發生了轉移,IP控制項就會向它的父視窗發送通知訊息IPN_FIELDCHANGED。在大多數情況下,我們都可以忽略此通知訊息。以下是處理通知訊息IPN_FIELDCHANGED的一個範例:
PRocedure Tform1.WndProc(var Msg: TMessage);var p:PNMHDR;begininherited; if Msg.Msg=WM_NOTIFYthen begin p:=Pointer(Msg.lParam); if p^.code=IPN_FIELDCHED then begin* IPN_FIELDCHANGED通知訊息…} end;end;end;