- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 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: 1359
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. 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -