Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Как обеспечить корректный ввод IP-адреса ?   Найти похожие ветки 

 
UnDISCOvery ©   (2002-06-04 16:42) [0]

Уважаемые ! Сабж !
Подскажите, плиз. А то сижу уже битый час - мучаюсь с этим гребанным MaskEdit. Наверняка кто-то уже делал ... Нужно чтобы было как в Виндах ... мол вводишь 2 цифры, и они сами становятся последними ... и тд


 
MAxiMum ©   (2002-06-04 16:58) [1]

С помощью MaskEdit не удобно (удобнее написать свой компонент), но тем не менее: EditMask := "990\.990\.990\.990;1; "; - если обязательные цифры только перед точками и EditMask := "000\.000\.000\.000;1; "; - если все цифры обязательны (рекомендуется).


 
Song ©   (2002-06-04 18:37) [2]

Есть отличный пример но большой. Трудностей не боитесь ? :))


 
Song ©   (2002-06-04 18:47) [3]


unit Unit1;

interface

uses
Windows, Messages, Classes, Forms, Controls, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: 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, Unit2;

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, Left, Top, Width, 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.


За место выделенных участков Вам необходимо подставить свои значения.


 
Song ©   (2002-06-04 18:49) [4]

Подробней на
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/ipaddress/ipaddress.asp



Страницы: 1 вся ветка

Текущий архив: 2002.06.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-55022
Vova33
2002-05-21 17:59
2002.06.17
Инсталяция MS SQL Server


14-55276
tim woods
2002-05-14 03:07
2002.06.17
Куплю авторские утилиты


3-55042
maxim2
2002-05-24 13:06
2002.06.17
Почему не выполняется комонда SQL ?


1-55097
Ray_Parker
2002-06-02 20:43
2002.06.17
Вопрос по TTimer


3-54988
Игорь_
2002-05-22 22:04
2002.06.17
Проблема с TIBQuery D6, IB6