Microsoft ® Internet Explorer  представляет элемент управления IP-адрес,  новый элемент управления похож на элемент управления редактирования, что позволяет пользователю ввести

числовой адрес в сети Интернет-протокола (IP). Этот формат состоит из четырех трехзначных полей. Каждое поле обрабатывается индивидуально; номера полей основываются на нулях и

перейдите слева направо.

 

Code:

 

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.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить