Создание нового компонента на базе элементов управления из библиотеки ComCtl32
procedure Register;
implementation
uses Graphics, commCTRL, comCTRLs;
constructor TCustomlPEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FIPAddress: = 0;
ControlStyle: = [csCaptureMouse, csClickEvents, csDoubleClicks, csOpaque];
Color: = clBtnFace;
Width: = 160;
Height: = 25;
Align: = alNone;
TabStop: = True; end;
procedure TCustomlPEdit.CreateParams(var Params: TCreateParams);
begin
InitCommonControl(ICC_INTERNET_CLASSES);
inherited CreateParams(Params); CreateSubClass(Params, WC_IPADDRESS);
with Params do
begin
Style: = WS_VISIBLE or WS_BORDER or WS_CHILD;
if NewStyleControls and CtlSD then
begin
Style: = Style and not WS_BORDER; ExStyle: = ExStyle or WS_EX_CLIENTEDGE;
end;
end;
end;
procedure TCustomlPEdit.CreateWnd;
var i: Integer;
begin
inherited CreateWnd; Clear;
{ for i: = 0 to 3 do
begin
MinIP[i]: = 0; MaxIP[i]: = $FF; end; }
CurrentField: = 0;
end;
procedure TCustomlPEdit.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
inherited;
Message.Result: = {Message.Result or} DLGC_WANTTAB;
end;
procedure TCustomlPEdit.CNNotify(var Message: TWMNotify);
begin
with Message.NMHdr" do
begin case Code of
IPN_FIELDCHANGED: begin
FCurrentField: = PNMIPAddress(Message.NMHdr)~.iField; {if Assigned(OnlpFieldChange) then
with PNMIPAdress(Message.NMHdr)^ do begin
OnIPFieldChange(Self, iField, iValue);}
end;
end;
end;
end;
(procedure TCustomlPEdit.KeyDown(var Key: Word; SHIFT: TSHIFTState);
begin
inherited KeyDown(Key, SHIFT);
if Key = VKJTAB then if ssSHIFT in SHIFT then
CurrentField: = (CurrentField – 1+4) mod 4
else
CurrentField: = (CurrentField + I) mod 4; end; }
{procedure TCustomlPEdit.CMWantSpecialKey(var Msg: TCMWantSpecialKey);
begin
inherited;
//Msg.Result: = Ord(Char(Msg.CharCode) = #9); end;}
procedure TCustomlPEdit.CMDialogChar(var Message: TCMDialogChar);
begin with Message do
if CharCode = VKJTAB then
begin
Message.Result: = 0; if GetKeyState(VK_SHIFT)<>0 then
begin
if (CurrentField=0) then Exit; CurrentField: = CurrentField – 1;
end
else
begin
if (CurrentField=3) then Exit; CurrentField: = CurrentField + 1;
end;
Message.Result: = 1; end //VK_TAB
else
inherited; end;
{procedure TCustomlPEdit.CMDialogKey(var Message: TCMDialogKey);
begin
if (Focused or Windows.IsChild(Handle, Windows.GetFocus))
and