急问MaskEdit控件中要输入IP地址的EditMask是什么?

HuoKevin 2003-07-17 10:12:31
很急于知道,但是分也不多了,不然的话不会吝啬的,
那位高手如果知道,请指教!
小弟不胜感激!!
谢谢!!
...全文
537 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanshing 2003-08-12
  • 打赏
  • 举报
回复
你要加入register函数,例如:
procedure Register;
begin
RegisterComponents('Samples', [TIPEdit]);
end;
Alexs 2003-08-07
  • 打赏
  • 举报
回复
安装完 baguli(巴古里)大大的东东,怎么没跑出个TIPEdit 的孔件?
jxc163 2003-07-25
  • 打赏
  • 举报
回复
学习
linfuyong 2003-07-25
  • 打赏
  • 举报
回复
###.###.###.###
baguli 2003-07-25
  • 打赏
  • 举报
回复
TIPEdit原码:

unit IPEdit;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, ComCtrls, CommCtrl,
WinSock;

type

TAboutString = type String;
TIPEdit = class;

TIPAddressFieldChangeEvent = procedure(Sender: TIPEdit; OldField, Value: Byte) of object;
TIPAddressChangeEvent = procedure(Sender: TIPEdit; IPAddress: String) of object;

TIPEdit = class(TWinControl)
private
FAbout: TAboutString;
FIPAddress, FMinIPAddress, FMaxIPAddress: Cardinal;
FActiveField: Byte;
FOnIPChange: TIPAddressChangeEvent;
FOnIPFieldChange: TIPAddressFieldChangeEvent;
private
function IP2String(const Value: Cardinal): String;
function String2IP(const Value: String): Cardinal;
function AdjustHeight: Integer;
function GetMinIPAddress: String;
function GetMaxIPAddress: String;
function GetIPAddress: String;
procedure SetMinIPAddress(Value: String);
procedure SetMaxIPAddress(Value: String);
procedure SetIPAddress(Value: String);
function GetEmpty: Boolean;
procedure SetActiveField(Value: Byte);
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
public
constructor Create(AOwner: TComponent); override;
procedure Clear;
published
property About: TAboutString read FAbout write FAbout;
property ActiveField: Byte read FActiveField write SetActiveField;
property DragCursor;
property DragMode;
property Empty: Boolean read GetEmpty;
property Enabled;
property HelpContext;
property Font;
property IPAddress: String read GetIPAddress write SetIPAddress;
property MinIPAddress: String read GetMinIPAddress write SetMinIPAddress;
property MaxIPAddress: String read GetMaxIPAddress write SetMaxIPAddress;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Tag;
property Visible;
property OnEnter;
property OnExit;
property OnDblClick;
property OnIPChange: TIPAddressChangeEvent read FOnIPChange write FOnIPChange;
property OnIPFieldChange: TIPAddressFieldChangeEvent read FOnIPFieldChange write FOnIPFieldChange;
end;

implementation

uses Math, Forms;

constructor TIPEdit.Create(AOwner: TComponent);
const
EditStyle = [csClickEvents, csSetCaption, csDoubleClicks, csFixedHeight];
begin
inherited Create(AOwner);
if NewStyleControls then
ControlStyle := EditStyle
else
ControlStyle := EditStyle + [csFramed];
Width := 140;
Height := 25;
TabStop := True;
ParentColor := False;
FIPAddress := $00000000;
FMinIPAddress := $00000000;
FMaxIPAddress := $FFFFFFFF;
FActiveField := 0;
end;

procedure TIPEdit.CreateParams(var Params: TCreateParams);
begin
InitCommonControl(ICC_INTERNET_CLASSES);
inherited CreateParams(Params);
CreateSubClass(Params, WC_IPADDRESS);
with Params do
begin
Style := WS_VISIBLE or WS_BORDER or WS_CHILD;
if NewStyleControls and Ctl3D then
begin
Style := Style and (not WS_BORDER);
ExStyle := ExStyle or WS_EX_CLIENTEDGE;
end;
end;
end;

procedure TIPEdit.CreateWnd;
begin
inherited CreateWnd;
Perform(WM_SIZE, SIZE_RESTORED, MakeLParam(Width, AdjustHeight));
Perform(IPM_SETADDRESS, 0, FIPAddress);
end;

procedure TIPEdit.WMSize(var Message: TWMSize);
begin
inherited;
Message.Height := AdjustHeight;
Message.Width := Max(Width, Screen.PixelsPerInch * 121 div 96);
Message.Result := 0;
end;

procedure TIPEdit.CNNotify(var Message: TWMNotify);
begin
with Message.NMHdr^ do
case Code of
IPN_FIELDCHANGED :
begin
FActiveField := PNMIPAddress(Message.NMHdr)^.iField;
if Assigned(OnIpFieldChange) then
with PNMIPAddress(Message.NMHdr)^ do
begin
OnIPFieldChange(Self, iField, iValue);
end;
end;
end;
end;

procedure TIPEdit.CNCommand(var Message: TWMCommand);
begin
if (Message.NotifyCode = EN_CHANGE) then
begin
Perform(IPM_GETADDRESS, 0, LParam(@FIPAddress));
if Assigned(OnIpChange) then OnIPChange(Self, IPAddress);
end;
end;

function TIPEdit.IP2String(const Value: Cardinal): String;
var ia: TInAddr;
pC: PChar;
begin
ia.S_addr := ntohl(Value);
pC := inet_ntoa(ia);
SetLength(Result, StrLen(pC));
StrCopy(PChar(Result), pC);
end;

function TIPEdit.String2IP(const Value: String): Cardinal;
begin
Result := htonl(inet_addr(PChar(Value)));
end;

function TIPEdit.GetIPAddress: String;
begin
Result := IP2String(FIPAddress);
end;

procedure TIPEdit.SetIPAddress(Value: String);
begin
FIPAddress := String2IP(Value);
Perform(IPM_SETADDRESS, 0, FIPAddress);
end;

function TIPEdit.GetMinIPAddress: String;
begin
Result := IP2String(FMinIPAddress);
end;

procedure TIPEdit.SetMinIPAddress(Value: String);
begin
FMinIPAddress := String2IP(Value);
Perform(IPM_SETRANGE, 0, MAKEIPRANGE(First_IPAddress(FMinIPAddress), First_IPAddress(FMaxIPAddress)));
Perform(IPM_SETRANGE, 1, MAKEIPRANGE(Second_IPAddress(FMinIPAddress), Second_IPAddress(FMaxIPAddress)));
Perform(IPM_SETRANGE, 2, MAKEIPRANGE(Third_IPAddress(FMinIPAddress), Third_IPAddress(FMaxIPAddress)));
Perform(IPM_SETRANGE, 3, MAKEIPRANGE(Fourth_IPAddress(FMinIPAddress), Fourth_IPAddress(FMaxIPAddress)));
end;

function TIPEdit.GetMaxIPAddress: String;
begin
Result := IP2String(FMaxIPAddress);
end;

procedure TIPEdit.SetMaxIPAddress(Value: String);
begin
FMaxIPAddress := String2IP(Value);
Perform(IPM_SETRANGE, 0, MAKEIPRANGE(First_IPAddress(FMinIPAddress), First_IPAddress(FMaxIPAddress)));
Perform(IPM_SETRANGE, 1, MAKEIPRANGE(Second_IPAddress(FMinIPAddress), Second_IPAddress(FMaxIPAddress)));
Perform(IPM_SETRANGE, 2, MAKEIPRANGE(Third_IPAddress(FMinIPAddress), Third_IPAddress(FMaxIPAddress)));
Perform(IPM_SETRANGE, 3, MAKEIPRANGE(Fourth_IPAddress(FMinIPAddress), Fourth_IPAddress(FMaxIPAddress)));
end;

function TIPEdit.GetEmpty: Boolean;
begin
Result := Perform(IPM_ISBLANK, 0, 0) <> 0;
end;

procedure TIPEdit.Clear;
begin
Perform(IPM_CLEARADDRESS, 0, 0);
end;

procedure TIPEdit.SetActiveField(Value: Byte);
begin
if (Value < 4) then
begin
Perform(IPM_SETFOCUS, WParam(Value), 0);
FActiveField := Value;
end;
end;

function TIPEdit.AdjustHeight: Integer;
var
DC: HDC;
oldFont: HFont;
I: Integer;
Metrics: TTextMetric;
begin
DC := GetDC(Handle);
try
oldFont := SelectObject(DC, Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, oldFont);
finally
ReleaseDC(Handle, DC);
end;
if NewStyleControls then
begin
if Ctl3D then I := 8 else I := 6;
I := GetSystemMetrics(SM_CYBORDER) * I;
end else
begin
I := Metrics.tmHeight;
I := I div 4 + GetSystemMetrics(SM_CYBORDER) * 4;
end;
Result := Metrics.tmHeight + I;
end;

end.
HuoKevin 2003-07-25
  • 打赏
  • 举报
回复
谢谢各位的支持,
能不能把TIPEdit的源码贴一份出来
呵呵
span_space 2003-07-19
  • 打赏
  • 举报
回复
用IPEDIT
baguli 2003-07-19
  • 打赏
  • 举报
回复
如果需要,我有TIPEdit的Source Code,可以给你
dongfang73 2003-07-18
  • 打赏
  • 举报
回复
000.000.000.000
ly_liuyang 2003-07-18
  • 打赏
  • 举报
回复
建议采用第三方的IPEdit之类的组件了
Mask对非法IP不能判定的
phenixSolon 2003-07-18
  • 打赏
  • 举报
回复
俺可以发一个给你,网友做的,我改了改!
phenixsolon@sjz.net.cn
cnhgj 2003-07-18
  • 打赏
  • 举报
回复
用IPEDIT!
ghostmirror 2003-07-18
  • 打赏
  • 举报
回复
'999.999.999.999' 000.000.000.000
解释如下,9的这组是可以输入数据也可以不输入的,0 的这组是必须输入满的,(要输入12个数字)
ly_liuyang(Liu Yang) ( 说的很有道理,除非你是对某一段ip进行输入,否则很容易出错的
darkhorsedba 2003-07-17
  • 打赏
  • 举报
回复
maskedit1.EditMask:='999.999.999.999';

5,512

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧