您的位置:首页资讯编程开发 → 如何为Delphi/C++Builder增添IP控件

如何为Delphi/C++Builder增添IP控件

时间:2010/2/22 11:36:00来源:本站整理作者:我要评论(2)

如何为Delphi/C++Builder增添IP控件:

            在进行网络设置时,我们常常碰到需要填写IP地址的情况,为此Windows引入了一个专门用来接受IP地址输入的控件(如图所示)。Windows IP地址编辑控件(IP Address edit control)是随着微软的Internet Explorer 4.0的推出而引入Windows操作系统的(Windows 98 和Windows 2000中都已经包含了此控件)。但是令人遗憾的是在Inprise公司最新版本的 Delphi 5和C++ Builder 5中,Borland可视化控件库(Visual Component Library)中居然没有提供IP地址编辑控件。

----为了让Delphi和C++ Builder开发人员更方便地使用IP 控件,本文介绍如何将它包装成一个可以在Delphi和C++ Builder的IDE环境中使用的可视化Delphi控件。同时本文也为读者学习Delphi控件编写提供了一个比较好的示例;它涉及了Delphi控件编写的以下方面的知识:将Windows窗口类封装成Delphi控件,将 Windows消息映射成事件属性,多个属性共享read和write方法,以及属性编辑器(Property Editor)的构造。

\
 

一、IP控件的属性、方法及事件

----本文将为Delphi/C++ Builder的IP控件实现下面的属性、方法和事件。它们的简单介绍如下:

----IP属性:IP控件中的IP地址值(32位整数LongWord)。为了获取IP控件的IP值,我们只需要读取此属性即可;通过对IP属性赋值,我们就能够改变IP控件的内容。

----Field0..Field3属性:Field0到Field3分别为IP控件的4个部分的值。这四个属性也是为了读取和改变IP控件的IP值而设置的。

----Field0Range..Field3Range 属性:Field0Range到 Field3Range限制IP控件各部分的取值的范围。

----Blank属性:判断IP控件的IP串是否为空,此属性为只读属性。

----About属性:在Object Inspector中点击它可以显示控件的版本信息,添加此属性是为了提供一个编写属性编辑器的简单例子。

----以下属性继承自TWinControl类:Font、TabOrder、 TabStop、 ParentShowHint、ShowHint、Hint及Visible。

----TIPEdit的事件属性有:OnFieldChange、OnChange、 OnEnter以及OnExit。

----Clear方法:清空IP控件中的IP串。

----SetFieldFocus方法:设置IP控件的输入焦点。

二、IP控件的实现

//文件名:IPEdit.PAS
{~~~~~~~~~~~~~~~~~~~~~~~}
// IP address edit control for Borland Delphi 5
// Implemented by Simon Liu (simon_liu@263.net)
{~~~~~~~~~~~~~~~~~~~~~~~}
unit IPEdit;
interface
uses Windows, Messages, SysUtils, Classes,
Forms, Controls, ComCtrls, CommCtrl, DsgnIntf;
type
TFieldRange = record
LowRange: Byte;
HighRange: Byte;
end;
TFieldChangeEvent = procedure(Sender: TObject;
OldField, Value: Byte) of Object;
//定义TAboutProperty属性编辑器
TAboutProperty = class(TPropertyEditor)
public
procedure Edit; override;
function GetAttributes: TPropertyAttributes;override;
function GetValue: string; override;
end;
TIPEdit = class(TWinControl)
private
fAbout:TAboutProperty;
FIP: LongWord;
FFields:array[0..3] of Byte;
FFieldRanges: array [0..3] of TFieldRange;
FCreating: Boolean;
FOnChange: TNotifyEvent;
FOnEnter: TNotifyEvent;
FOnExit: TNotifyEvent;
FOnFieldChange: TFieldChangeEvent;
procedure SetIP(Value: LongWord);
function GetIP: LongWord;
function GetField(Index:Integer):Byte;
procedure SetField(Index:Integer; B:Byte);
function GetFieldRange(Field: Integer):
TFieldRange;
procedure SetFieldRange(Field:integer; Value:
TFieldRange);
procedure SetIPAddress;
function GetBlank: Boolean;
procedure WMNotifyFormat(var Message: TMessage);
message WM_NOTIFYFORMAT;
//处理IP控件的通知消息IPN_FIELDCHANGED
procedure CNNotify(var Message: TWMNotify);
message CN_NOTIFY;
procedure CNCommand(var Message: TWMCommand);
message CN_COMMAND;
procedure WMSetFont(var Message: TWMSetFont);
message WM_SETFONT;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
//清除IP控件中的IP串
procedure Clear;
//设置IP控件的输入焦点(field的有效取值为0..3)
procedure SetFieldFocus(Field:Byte);
published
//判断IP控件的IP串是否为空
property Blank: Boolean read GetBlank;
//Field0到Field3分别为IP控件的4个部分的值
property Field0: Byte index 0 read
GetField write SetField;
property Field1: Byte index 1 read
GetField write SetField;
property Field2: Byte index 2 read
GetField write SetField;<

相关视频

    没有数据

相关阅读 iPhone数据迁移怎么用 iOS 12.4数据迁移功能使用教程LOL云顶之弈各英雄如何搭配装备 云顶之弈全英雄装备搭配推荐dnfhello特权专区活动地址 dnfhello特权专区黑钻礼包领取地址dnfhello语音打团开黑领福利活动地址 dnfhello语音黑钻礼包领取地ELDEN RING什么时候出 ELDEN RING发售时间一览瘟疫传说无罪配置要求如何 瘟疫传说无罪配置要求推荐进击的巨人2最终之战配置要求如何 进击的巨人2最终之战配置推荐如龙极2配置要求如何 如龙极2配置要求推荐

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 编程语言排行榜2020年android studio怎么删 eclipse怎么设置编码格式 eclipse设置编码格andriod studio如何使用真机测试 andriod sandroid studio怎么生成apk android studioandroid studio如何导入jar包 android stud

人气排行 安卓模拟器BlueStacks安装使用教程编程语言排行榜2020年9月 TIOBE编程语言排行eclipse字体大小怎么设置 eclipse字体大小plsql developer怎么连接数据库 plsql deveTomcat9.0安装教程 Tomcat9.0环境变量配置方plsql developer怎么使用 plsql developerVisual Studio 2015环境搭建教程Eclipse优化设置教程 Eclipse优化设置技巧