constructor TCXIPAddress.Create(AOwner: TComponent);
var
i: integer;
begin
CheckCommonControl(ICC_INTERNET_CLASSES or ICC_BAR_CLASSES);
inherited Create(AOwner);
For i:= 0 to 3 do
begin
FFieldRanges[i].LowRange:= 0;
FFieldRanges[i].HighRange:= 255;
end;
FFirstIPAddress:= 0;
FSecondIPAddress:= 0;
FThirdIPAddress:= 0;
FFourthIPAddress:= 0;
FValue:= MakeIPAddress(FFirstIPAddress, FSecondIPAddress,
FThirdIPAddress, FFourthIPAddress);
Height:= 25;
Width:= 151;
TabSTop:= True;
end;
procedure TCXIPAddress.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
CreateSubClass(Params, WC_IPADDRESS);
end;
procedure TCXIPAddress.CreateWnd;
begin
FCreating := True;
try
inherited CreateWnd;
SetIPAddress(FValue);
finally
FCreating := False;
end;
end;
function TCXIPAddress.GetBlank: Boolean;
begin
Result:= Boolean(perform(IPM_ISBLANK, 0, 0));
end;
function TCXIPAddress.GetFieldRanges(Field: Integer): TFieldRange;
begin
Result:= FFieldRanges[Field];
end;
function TCXIPAddress.GetFirstIPAddress: Byte;
begin
Result:= FIRST_IPADDRESS(IPAddress);//GetIPAddress(0);
end;
function TCXIPAddress.GetFourthIPAddress: Byte;
begin
Result:= FOURTH_IPADDRESS(IPAddress);//GetIPAddress(3);
end;
function TCXIPAddress.GetIPAddress: LongInt;
var
buffer: LongInt;
begin
buffer:= 0;
perform(IPM_GETADDRESS, 0, LongInt(@Buffer));
Result:= Buffer;
end;
function TCXIPAddress.GetSecondIPAddress: Byte;
begin
Result:= SECOND_IPADDRESS(IPAddress);//GetIPAddress(1);
end;
function TCXIPAddress.GetThirdIPAddress: Byte;
begin
Result:=THIRD_IPADDRESS(IPAddress); //GetIPAddress(2);
end;
procedure TCXIPAddress.SetActiveField(Value: Byte);
begin
if FActiveField=Value then Exit;
if ( Value < 4 ) then begin
SendMessage(Handle, IPM_SETFOCUS, wParam(Value), 0);
FActiveField:= Value;
end;
end;
procedure TCXIPAddress.SetAllRanges(Range: TFieldRange);
var
I:integer;
begin
for i:= 0 to 3 do
begin
SetFieldRanges(i, Range);
end;
end;
procedure TCXIPAddress.SetFieldRanges(Field: integer; Value: TFieldRange);
begin
if Value.LowRange > Value.HighRange then
exit;
if (FFieldRanges[Field].LowRange <> Value.LowRange) or
(FFieldRanges[Field].HighRange <> Value.HighRange) then
begin
FFieldRanges[Field]:= Value;
perform(IPM_SETRANGE, Field,
MakeIPRange(Value.LowRange, Value.HighRange));
end;
end;
procedure TCXIPAddress.SetFirstIPAddress(Value: Byte);
begin
if (FFirstIPAddress <> Value) then
begin
FFirstIPAddress:= Value;
IPAddress:=MAKEIPADDRESS(FFirstIPAddress, FSecondIPAddress,
FThirdIPAddress, FFourthIPAddress);
end;
end;
procedure TCXIPAddress.SetFourthIPAddress(Value: Byte);
begin
if (FFourthIPAddress <> Value) then
begin
FFourthIPAddress:= Value;
IPAddress:=MAKEIPADDRESS(FFirstIPAddress, FSecondIPAddress,
FThirdIPAddress, FFourthIPAddress);//SetIPAddress;
end;
end;
procedure TCXIPAddress.SetIPAddress(Value:Longint);
begin
if FValue=Value then Exit;
Perform(IPM_SETADDRESS, 0,
MAKEIPADDRESS(FFirstIPAddress, FSecondIPAddress,
FThirdIPAddress, FFourthIPAddress));
Perform(IPM_GETADDRESS, 0, Longint(@FValue));
end;
procedure TCXIPAddress.SetSecondIPAddress(Value: Byte);
begin
if (FSecondIPAddress <> Value) then
begin
FSecondIPAddress:= Value;
IPAddress:=MAKEIPADDRESS(FFirstIPAddress, FSecondIPAddress,
FThirdIPAddress, FFourthIPAddress);//SetIPAddress;
end;
end;
procedure TCXIPAddress.SetThirdIPAddress(Value: Byte);
begin
if (FThirdIPAddress <> Value) then
begin
FThirdIPAddress:= Value;
IPAddress:=MAKEIPADDRESS(FFirstIPAddress, FSecondIPAddress,
FThirdIPAddress, FFourthIPAddress);//SetIPAddress(;
end;
end;
function TCXIPAddress.IPToString(Ip: Longint):string;
begin
Result:= IntToStr(First_IPAddress(Ip))+'.'+IntToStr(Second_IPAddress(Ip))+'.'+
IntToStr(Third_IPAddress(Ip))+'.'+IntToStr(Fourth_IPAddress(Ip));
end;
function TCXIPAddress.StringToIp(Value: string):LongInt;
var B: Array[0..3] of Byte;
Str: String;
i, Cnt : Integer;
begin
B[0]:= 0;
B[1]:= 0;
B[2]:= 0;
B[3]:= 0;
Cnt:= 0;
i:= Pos('.', Value);
while (Length(Value) > 0) and ( Cnt < 4 ) do begin
if ( i = 0 ) then i:= Length(Value)+1;
Str:= Copy(Value, 0, i-1);
B[Cnt]:= StrToInt(Str);
Value:= Copy(Value, i+1, Length(Value));
i:= Pos('.', Value);
Inc(Cnt);
end;
Result:= MakeIPAddress(b[0], b[1], b[2], b[3]);
end;
end.
//改进ipaddress变成ip,增加字符串形式的ipAddress