//---------------------------------------------------------------------------
#ifndef code__TGLYIPAddressH
#define code__TGLYIPAddressH
#define UM_RANGECHANGEEVENT WM_USER + 1
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <Winsock2.h>
//---------------------------------------------------------------------------
class TIPRange : public TPersistent
{
private:
Byte FHigh; //IP上限
Byte FLow; //IP下限
HWND FHandle;
Byte FFieldID;
protected:
void __fastcall SetMaxRange(Byte value); //设置上限
void __fastcall SetMinRange(Byte value); //设置下限
public:
__fastcall TIPRange(HWND handle,Byte ID);
void __fastcall SetHandle(HWND handle);
//virtual void __fastcall Assign(Classes::TPersistent* Source);
__published:
__property Byte FieldID = {read=FFieldID};
__property Byte High = {read=FHigh,write=SetMaxRange};
__property Byte Low = {read=FLow,write=SetMinRange};
};
class TGLYIPAddress;
/*定义焦点更改事件*/
typedef void __fastcall(__closure *TIPAddressFieldChangeEvent)(TGLYIPAddress* Sender,
Byte OldField, Byte Value);
/*定义IP更改事件*/
typedef void __fastcall(__closure *TIPAddressChangeEvent)(TGLYIPAddress * Sender,
DWORD IPAddress);
class PACKAGE TGLYIPAddress : public TWinControl
{
private:
/*IP更改事件*/
TIPAddressChangeEvent FOnIPChange;
/*焦点更改事件*/
TIPAddressFieldChangeEvent FOnIPFieldChange;
/*地址0字段范围*/
TIPRange * FField0Range;
/*地址1字段范围*/
TIPRange * FField1Range;
/*地址2字段范围*/
TIPRange * FField2Range;
/*地址3字段范围*/
TIPRange * FField3Range;
/*IP地址最大值*/
UnicodeString FMaxIP;
/*IP地址最小值*/
UnicodeString FMinIP;
/*缺省IP地址*/
UnicodeString FDefaultIP;
/*当前焦点所在field*/
Byte FActiveField;
/*WM_NOTIFY消息处理函数*/
void __fastcall CNNotify(TWMNotify &Message); //WM_NOTIFY;
/*WM_COMMAND消息处理函数*/
void __fastcall CNCommand(TWMCommand &Message); //WM_COMMAND;
/*UM_RANGECHANGEEVENT消息处理函数*/
void __fastcall RangeChange(TMessage &Message); //UM_RANGECHANGEEVENT;
protected:
/*重载父类函数*/
virtual void __fastcall CreateHandle(void);
/*重载父类函数*/
virtual void __fastcall CreateParams(TCreateParams &Params);
/*重载父类函数*/
void __fastcall WndProc(TMessage &Message);
/*设置IP范围*/
void __fastcall SetIPRange(TIPRange * value);
/*设置Max IP*/
void __fastcall SetMaxIP(UnicodeString value);
/*设置Min IP*/
void __fastcall SetMinIP(UnicodeString value);
/*设置焦点位置*/
void __fastcall SetActiveField(Byte Value);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(CN_NOTIFY, TWMNotify, CNNotify);
VCL_MESSAGE_HANDLER(CN_COMMAND, TWMCommand, CNCommand);
VCL_MESSAGE_HANDLER(UM_RANGECHANGEEVENT, TMessage, RangeChange);
END_MESSAGE_MAP(TWinControl);
public:
/*构造函数*/
__fastcall TGLYIPAddress(TComponent* Owner);
/*析构函数*/
__fastcall ~TGLYIPAddress();
/*清空IP输入框*/
void __fastcall Clear();
/*Text是否为空*/
bool __fastcall GetEmpty();
/*获得当前IP*/
DWORD __fastcall GetIPAddress();
/*设置当前IP*/
void __fastcall SetIPAddress(DWORD Value);
__published:
__property TIPAddressChangeEvent OnIPChange = {read = FOnIPChange, write = FOnIPChange};
__property TIPAddressFieldChangeEvent OnIPFieldChange = {read = FOnIPFieldChange, write = FOnIPFieldChange};
__property Byte ActiveField = {read = FActiveField, write = SetActiveField};
__property UnicodeString MaxIP = {read = FMaxIP ,write = SetMaxIP};
__property UnicodeString MinIP = {read = FMinIP ,write = SetMinIP};
__property UnicodeString DefaultIP = {read = FDefaultIP, write = FDefaultIP};
__property bool Empty = {read = GetEmpty};
__property TIPRange * Field0Range = {read = FField0Range,write = SetIPRange};
__property TIPRange * Field1Range = {read = FField1Range,write = SetIPRange};
__property TIPRange * Field2Range = {read = FField2Range,write = SetIPRange};
__property TIPRange * Field3Range = {read = FField3Range,write = SetIPRange};
__property OnEnter;
__property OnExit;
__property ParentColor;
__property ParentFont;
__property ParentShowHint;
__property PopupMenu;
__property ShowHint;
__property TabOrder;
__property TabStop;
__property Tag;
__property DragCursor;
__property DragMode;
__property HelpContext;
__property Text;
};
//---------------------------------------------------------------------------
#endif