Zum Eintragen einer IP-Adresse stehen uns die Nachricht
MAKEIPADDRESS", zur Verfügung. Normalerweise handelt es sich bei einer IP-Adresse nämlich um einen 32-Bit-Wert, der aber (zur besseren Lesbarkeit) in vier Felder zu je 8 Bit aufgeteilt ist, die durch Punkte voneinander getrennt sind ("doted quad notation"). So entspricht z.B. der Wert 2130706433 (0x7f000001) der IP-Adresse "127.0.0.1". Und wenn man nicht umständlich den DWORD-Wert einer Adresse ausrechnen möchte, kann man die Hilfe von "MAKEIPADDRESS" direkt die einzelnen Bytes angeben:
if(hIpAddr <> 0) then SendMessage(hIpAddr,IPM_SETADDRESS,0,MAKEIPADDRESS(127,0,0,1));
Das Auslesen der aktuellen IP-Adresse aus dem Control führen wir mit Hilfe der Nachricht
LPARAM-Wert einen Zeiger auf eine DWORD-Variable erwartet, was in unserem Beispiel so aussieht:
var curIp : dword;
{ ... }
SendMessage(hIpAddr,IPM_GETADDRESS,0,LPARAM(@curIp));
Damit wir in unseren Programmen ebenfalls die übliche Schreibweise benutzen können, enthält die Unit "CommCtrl.pas" vier Funktionen, mit denen wir die einzelnen Bytes aus unserer Variablen extrahieren können:
FIRST_IPADDRESS (LPARAM lParam) SECOND_IPADDRESS(LPARAM lParam) THIRD_IPADDRESS (LPARAM lParam) FOURTH_IPADDRESS(LPARAM lParam)
Alle vier Funktionen haben gemeinsam, dass sie als Parameter den DWORD-Wert der IP-Adresse erwarten. Jede liefert dann allerdings ein anderes Byte der Adresse zurück. Würde man die Beispieladresse "127.0.0.1" z.B. von "FIRST_IPADDRESS" bearbeiten lassen, wäre das Ergebnis "127". Bei "SECOND_IPADDRESS" dagegen wäre das Ergebnis Null, usw.
Das Beispielprogramm nutzt alle vier Funktionen, um die IP-Adresse formatiert an ein Label weiterzugeben:
IpStr := Format('%d.%d.%d.%d', [FIRST_IPADDRESS(curIp),SECOND_IPADDRESS(curIp), THIRD_IPADDRESS(curIp),FOURTH_IPADDRESS(curIp)]);
SendMessage(hLabel,WM_SETTEXT,0,LPARAM(@IpStr[1]));
Um das komplette IP-Eingabefeld zu leeren, verwenden wir die Nachricht "IPM_CLEARADDRESS", die keine besonderen Parameter erwartet:
SendMessage(hIpAddr,IPM_CLEARADDRESS,0,0);