1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| procedure TForm1.FormCreate(Sender: TObject);
begin
{ Initialize the maskedit boxes to contain the empty string. }
MaskEdit1.Text := '';
MaskEdit2.Text := '';
MaskEdit3.Text := '';
{ Use the Courier font in the maskedit boxes. }
MaskEdit1.Font.Name := 'Courier';
MaskEdit2.Font.Name := 'Courier';
MaskEdit3.Font.Name := 'Courier';
{
Initialize the mask of each maskedit box
according to IP address coding conventions.
}
MaskEdit1.EditMask := '!099.099.099.099;1; ';
MaskEdit2.EditMask := '!099.099.099.099;1; ';
MaskEdit3.EditMask := '!099.099.099.099;1; ';
MaskEdit2.OnExit := MaskEdit2Exit;
end;
procedure TForm1.MaskEdit2Exit(Sender: TObject);
var
net1, net2, host1, host2,
netmask1, netmask2, hostmask1, hostmask2,
sub_net1, sub_net2, sub_host1, sub_host2: Integer;
IP, mask: String;
begin
// Extract the net and host address from the IP.
IP := MaskEdit1.Text;
net1 := StrToInt(TrimRight(Copy(IP, 0, 3)));
net2 := StrToInt(TrimRight(Copy(IP, 5, 3)));
host1 := StrToInt(TrimRight(Copy(IP, 9, 3)));
host2 := StrToInt(TrimRight(Copy(IP, 13, 3)));
// A range test that you cannot validate through edit masks.
if ((net1 < 0) Or (net1 > 255) Or
(net2 < 0) Or (net2 > 255) Or
(host1 < 0) Or (host1 > 255) Or
(host2 < 0) Or (host2 > 255)) then
raise EArgumentException.Create('Not a valid IP address.');
// Extract the net and host mask from the subnet mask.
mask := MaskEdit2.Text;
netmask1 := StrToInt(TrimRight(Copy(mask, 0, 3)));
netmask2 := StrToInt(TrimRight(Copy(mask, 5, 3)));
hostmask1 := StrToInt(TrimRight(Copy(mask, 9, 3)));
hostmask2 := StrToInt(TrimRight(Copy(mask, 13, 3)));
// A range test that you cannot validate through edit masks.
if ((netmask1 < 0) Or (netmask1 > 255) Or
(netmask2 < 0) Or (netmask2 > 255) Or
(hostmask1 < 0) Or (hostmask1 > 255) Or
(hostmask2 < 0) Or (hostmask2 > 255)) then
raise EArgumentException.Create('Not a valid subnet mask.');
// Compute the subnet address using bitwise AND.
sub_net1 := net1 And netmask1;
sub_net2 := net2 And netmask2;
sub_host1 := host1 And hostmask1;
sub_host2 := host2 And hostmask2;
// Display the subnet address.
MaskEdit3.Text :=
IntToStr(sub_net1) + '.' + IntToStr(sub_net2) + '.' +
IntToStr(sub_host1) + '.' + IntToStr(sub_host2);
end; |
Partager