----- In Netzwerkprogrammen kommt es häufig vor, dass Benutzer IP-Adressen eingeben müssen. Da uns Delphi jedoch kein Steuerelement zur Verfügung stellt, mit dem wir die IP-Zeichenfolge eingeben können, müssen wir das Tedit-Steuerelement (einzeiliges Textfeld) verwenden, um die vom Benutzer eingegebene IP-Zeichenfolge zu akzeptieren. Die Verwendung von Tedit zur Eingabe des IP-Strings ist jedoch keine gute Idee, da die Handhabung sehr umständlich ist. Tatsächlich gibt es neben uns ein Windows-Steuerelement speziell für die Eingabe von IP-Strings, wie in der Abbildung gezeigt. Das IP-Steuerelement weist illegale IP-Zeichenfolgen zurück (in jedem Teil können nur Zahlen zwischen 0 und 255 eingegeben werden). Dadurch können Sie problemlos den IP-Wert (32-Bit-Ganzzahl) ermitteln, der dem IP-Zeichenfolge im Steuerelement entspricht erspart Ihnen die Umrechnung zwischen IP-Strings und IP-Werten; außerdem können Sie den Bereich der IPs einschränken, die in die IP-Steuerung eingegeben werden können. In diesem Artikel stelle ich Ihnen vor, wie Sie Windows-IP-Steuerelemente in unseren Delphi-Programmen verwenden.
---- In Windows gibt es zwei sehr wichtige dynamische Linkbibliotheken: commctrl.dll und comctl32.dll, bei denen es sich um die benutzerdefinierten Steuerelementbibliotheken von Windows (Windows Common Controls) handelt. Die benutzerdefinierte Steuerelementbibliothek enthält viele häufig verwendete Windows-Steuerelemente wie Statusbar, Coolbar, HotKey usw.; in Delphi wurden die meisten dieser Steuerelemente als visuelle Steuerelemente verpackt. Nach dem Start von Internet Explorer 3 durch Microsoft wurden der benutzerdefinierten Steuerelementbibliothek einige neue Steuerelemente hinzugefügt, darunter das Windows-IP-Steuerelement (Steuerelement zum Bearbeiten der IP-Adresse).
---- Initialisieren Sie die benutzerdefinierte Windows-Steuerelementbibliothek
---- Windows bietet zwei API-Funktionen, InitCommonControls und InitCommonControlsEx, zum Initialisieren benutzerdefinierter Steuerelementbibliotheken. Anhand der Namen ist die Beziehung zwischen diesen beiden API-Funktionen nicht schwer zu erkennen: Letztere ist eine Erweiterung der ersteren. Wenn Sie IP-Steuerelemente in Ihrem Programm verwenden möchten, müssen Sie InitCommonControlsEx verwenden, um die Initialisierung benutzerdefinierter Steuerelementbibliotheken und -klassen abzuschließen. Der Prototyp der Funktion InitCommonControlsEx lautet wie folgt (Pascal-Syntax):
----...
---- IP-Steuerung erstellen
----...
---- IP-Steuerung verwenden. Im Programm kommunizieren wir mit der IP-Steuerung, indem wir Nachrichten an sie senden. Die IP-Steuerung kann auf die folgenden sechs Meldungen reagieren. Diese Meldungen und ihre Bedeutung sind in der folgenden Tabelle aufgeführt:
----...
---- Wenn Sie den IP-Wert erhalten möchten, der der IP-Zeichenfolge im IP-Steuerelement entspricht, sollten Sie die Nachricht IPM_GETADDRESS an das IP-Steuerelement senden und als letzten Parameter von SendMessage eine 32-Bit-Ganzzahladresse verwenden .
----...
---- Benachrichtigungsmeldung zur IP-Kontrolle
---- Wenn die IP-Zeichenfolge geändert oder der Eingabefokus übertragen wird, sendet das IP-Steuerelement die Benachrichtigungsnachricht IPN_FIELDCHANGED an sein übergeordnetes Fenster. In den meisten Fällen können wir diese Benachrichtigung ignorieren. Das Folgende ist ein Beispiel für die Behandlung der Benachrichtigungsnachricht IPN_FIELDCHANGED:
PROcedure Tform1.WndProc(var Msg: TMessage);var p:PNMHDR;begininherited; if Msg.Msg=WM_NOTIFYthen begin p:=Pointer(Msg.lParam); if p^.code=IPN_FIELDCHANGED then begin{...processing of IP steuert IPN_FIELDCHANGED-Benachrichtigungsnachricht...} end;end;end;