Forum
Grundkurs
»Introduktion
»Snabbguide
»Komponenter
»Händelser
»Strängar
»Räkna med Delphi »Egna
typer
»Selektion
»Iteration
»Menyer
»Funktioner
»Arraystrukturer
Tips & Tricks
»Nya tips
»Blandat
»Databaser
»Filer
»Forms
»Grafik
»Internet
»Komponenter
»Matematik
»Multimedia
»Objekt/ActiveX
»Skrivare
»Strängar
»System
»Mest lästa tips
Artiklar
»Delphi och ADO
»Bygga en DLL
»Skapa en enkel rapport
»Hantera registret
»Enheter, units
»Klassen TCanvas
»Använd LookUp Controls
Nya
tips
Lägg
till tips
Delphilänkar
Gästbok
|
|
|
|
Använd IP-adress kontroll
|
Kategori: System
Inlagt: 2005-12-28
Läst: 1432
Inlagt av: Staffan Berg
|
Beskrivning |
IE 4 introducerade en s k IP-adresskontroll som försäkrade användaren att skriva in numeriska tal i rätt format. Detta format består av fyra grupper som max får innehålla 3 siffror i varje grupp. Varje grupp behandlas också individuellt. I exemplet nedan kontrolleras IP-adresser enligt detta koncept.
|
Kod |
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.
|
|
|