Mega Code Archive

 
Categories / Delphi / System
 

Use the ip address control in a form

{ Microsoft® Internet Explorer Version 4.0 introduces the IP address control, a new control similar to an edit control that allows the user to enter a numeric address in Internet protocol (IP) format. This format consists of four three-digit fields. Each field is treated individually; the field numbers are zero-based and proceed from left to right as shown in this figure. Further informations http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/ipaddress/ipaddress.asp } unit Unit1; interface uses Windows, Messages, Classes, Forms, Controls, StdCtrls, ExtCtrls; type TForm1 = class(TForm) IPAddress: TBevel; SetIP: TButton; ClearIP: TButton; procedure FormCreate(Sender: TObject); procedure SetIPClick(Sender: TObject); procedure ClearIPClick(Sender: TObject); private FIPAddress: Longint; HIPAddress: HWND; PrevWndProc: TWndMethod; procedure NewWindowProc(var Message: TMessage); public end; var Form1: TForm1; implementation {$R *.dfm} uses CommCtrl; const IP_ADDRESS_ID: Longword = $0100; procedure TForm1.FormCreate(Sender: TObject); var lpInitCtrls: TInitCommonControlsEx; begin lpInitCtrls.dwSize := SizeOf(TInitCommonControlsEx); lpInitCtrls.dwICC := ICC_INTERNET_CLASSES; if InitCommonControlsEx(lpInitCtrls) then begin PrevWndProc := WindowProc; WindowProc := NewWindowProc; HIPAddress := CreateWindowEx(WS_EX_LEFT, WC_IPADDRESS, nil, WS_CHILD + WS_VISIBLE + WS_BORDER + WS_TABSTOP, IPAddress.Left, IPAddress.Top, IPAddress.Width, IPAddress.Height, Handle, IP_ADDRESS_ID, HInstance, nil); SendMessage(HIPAddress, IPM_SETFOCUS, 0, 0); end; end; procedure TForm1.NewWindowProc(var Message: TMessage); var nField: longint; begin case Message.Msg of WM_NOTIFY: begin if PNMHDR(Ptr(Message.lParam)).idFrom = IP_ADDRESS_ID then begin case PNMIPAddress(ptr(Message.lParam)).hdr.code of IPN_FIELDCHANGED: begin if SendMessage(HIPAddress, IPM_ISBLANK, 0, 0) = 0 then SendMessage(HIPAddress, IPM_GETADDRESS, 0, lParam(LPDWORD(@FIPAddress))); end; end; end; end; WM_COMMAND: begin if Message.WParamLo = IP_ADDRESS_ID then case Message.WParamHi of EN_SETFOCUS: begin nField := SendMessage(HIPAddress, IPM_GETADDRESS, 0, lParam(LPDWORD(@FIPAddress))); if nField = 4 then nField := 0; SendMessage(HIPAddress, IPM_SETFOCUS, wParam(nField), 0); end; EN_KILLFOCUS: begin if SendMessage(HIPAddress, IPM_ISBLANK, 0, 0) = 0 then SendMessage(HIPAddress, IPM_GETADDRESS, 0, lParam(LPDWORD(@FIPAddress))); end; EN_CHANGE: begin end; end; end; end; if Assigned(PrevWndProc) then PrevWndproc(Message); end; procedure TForm1.SetIPClick(Sender: TObject); begin FIPAddress := MAKEIPADDRESS(127, 0, 0, 1); SendMessage(HIPAddress, IPM_SETADDRESS, 0, lParam(DWORD(FIPAddress))); end; procedure TForm1.ClearIPClick(Sender: TObject); begin SendMessage(HIPAddress, IPM_CLEARADDRESS, 0, 0); end; end.