AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit IP-Eingabefld

Ein Thema von FriFra · begonnen am 1. Aug 2009 · letzter Beitrag vom 1. Aug 2009
 
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

Problem mit IP-Eingabefld

  Alt 1. Aug 2009, 11:38
Ich hab mir von den Schweizern den Code für: "use the IP Address Control in a Form" geholt und eingebaut.
Das Feld erscheint und hat zu Beginn den Focus, so dass ich hinein schreiben kann. Sobald ich aber das Feld verlasse kann ich nicht mehr den Focus darauf setzen (weder mit Tab, noch mit der Maus).
Delphi-Quellcode:
unit frmEasySettings;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ImgList, ToolWin, StdCtrls, Registry, ShellApi, ExtCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ImageList1: TImageList;
    GroupBox1: TGroupBox;
    ComboBox1: TComboBox;
    Label1: TLabel;
    ComboBox2: TComboBox;
    IPAddress: TEdit;
    procedure ToolButton1Click(Sender: TObject);
    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
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses
  CommCtrl;

const
  IP_ADDRESS_ID: Longword = $0100;

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  close;
end;

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,
      Tabsheet1.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.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz