?? 100603_05.htm
字號:
<html>
<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>計算機世界日報:
在Delphi中使用IP控件
</title>
<!--***********-->
</head>
<body bgcolor="#FFFFFF" >
<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
在Delphi中使用IP控件
</h2></font>
<h3>
西安交通大學
<br>劉明華
</h3>
</center>
<p><font color="#ffffff">----</font>
[本文為節略,全文可<a href="100603-05.zip">下載</a> Zip 28KB]
<p><font color="#ffffff">----</font>
在網絡程序中,我們常常碰到需要用戶輸入IP地址的情況。然而Delphi并沒有為我們提供可以用于輸入IP串的控件,于是我們只好用Tedit控件(單行文本框)來接受用戶輸入的IP串。但是,使用Tedit來輸入IP串并不是一個好的主意,因為處理起來非常不方便。事實上,在我們的身旁有一個專門用來輸入IP串的Windows控件,該控件如圖所示。IP控件會拒絕非法的IP串(在每個部分只能輸入0..255之間的數字);它讓你可以輕松地獲取控件中的IP串所對應的IP值(32位整數),這省去了IP串和IP值之間相互轉換的麻煩;此外,你還能限制IP控件中所能輸入的IP的范圍。在本文中,我將向大家介紹如何在我們的Delphi程序中使用Windows的IP控件。
<p><font color="#ffffff">----</font>
Windows中有兩個非常重要的動態聯結庫:commctrl.dll和comctl32.dll,它們是Windows的自定義控制庫(Windows Common Controls)。自定義控制庫中包含了許多常用的Windows控件,如Statusbar,Coolbar,HotKey等;在Delphi中,這些控件大多數都已被包裝成可視化控件了。在Microsoft推出Internet Explorer 3之后,自定義控制庫中新增了一些控件,其中就包括Windows的IP控件(IP Address edit control)。
<p><font color="#ffffff">----</font>
<b>初始化Windows自定義控制庫</b>
<p><font color="#ffffff">----</font>
Windows提供了兩個API函數,InitCommonControls和InitCommonControlsEx,用來初始化自定義控制庫。從名字我們不難看出這兩個API函數的關系:后者是前者的增強。如果你希望在程序中使用IP控件,你必須用InitCommonControlsEx來完成對自定義控制庫以及類的初始化。函數InitCommonControlsEx的原型如下(Pascal語法):
<p><font color="#ffffff">----</font>
... ...
<p><font color="#ffffff">----</font>
<b>創建IP控件</b>
<p><font color="#ffffff">----</font>
... ...
<p><font color="#ffffff">----</font>
使用IP控件。 在程序中,我們通過向IP控件發送消息來與它通訊。IP控件可以響應的消息有以下6個,這些消息及它們的含義,見下表:
<p><font color="#ffffff">----</font>
... ...
<p><font color="#ffffff">----</font>
若想要獲取IP控件中IP串所對應的IP值,你應該向IP控件發送IPM_GETADDRESS消息,并且需要把一個32位整數的地址作為SendMessage的最后一個參數。
<p><font color="#ffffff">----</font>
... ...
<p><font color="#ffffff">----</font>
<b>IP控件的通知消息</b>
<p><font color="#ffffff">----</font>
當IP串被改動后或者輸入焦點發生了轉移,IP控件就會向它的父窗口發送通知消息IPN_FIELDCHANGED。在大多數情況下,我們都可以忽略此通知消息。以下是處理通知消息IPN_FIELDCHANGED的一個示例:
<pre>
procedure Tform1.WndProc(var Msg: TMessage);
var p:PNMHDR;
begin
inherited;
if Msg.Msg=WM_NOTIFY
then begin
p:=Pointer(Msg.lParam);
if p^.code=IPN_FIELDCHANGED
then begin
{…
處理IP控件的IPN_FIELDCHANGED通知消息
…}
end;
end;
end;
</pre>
<p align="right"><small><em>中國計算機世界出版服務公司版權所有</em></small>
<br>
</p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -