Auf Änderungen reagieren


Das IP-Eingabefeld sendet die Nachricht "IPN_FIELDCHANGED" als Teil von "WM_NOTIFY", sobald sich irgendetwas ändert. Das betrifft allerdings nicht nur die Änderung von Werten der einzelnen Bytefelder. Die Nachricht wird auch gesendet, wenn man sich innerhalb des Controls mit der Maus oder den Pfeiltasten von einem Bytefeld zum nächsten bewegt.

Das Beispielprogramm verdeutlicht dieses Prinzip, in dem es bei jedem Auftreten der Nachricht den Wert des geänderten Feldes heraussucht und im Label anzeigt:

WM_NOTIFY:
  if(PNMIpAddress(lp)^.hdr.Code = IPN_FIELDCHANGED) then
  begin
    IpStr := Format('Feld "%d" enthält Wert "%d"',
      [POINTER(PNMIpAddress(lp)^.iField + 1),
       POINTER(PNMIpAddress(lp)^.iValue)]);
    SendMessage(hLabel,WM_SETTEXT,0,LPARAM(@IpStr[1]));
  end;



Außerdem besitzt das IP-Feld eine typische Eigenschaft der bekannten Eingabefelder: wird etwas geändert, wird "EN_CHANGE" ausgelöst. Das heißt: Sie können bereits während der Eingabe reagieren. Das kann z.B. hilfreich sein, wenn Sie bestimmte Elemente in Abhängigkeit von einer korrekten Ein- oder Angabe aktivieren oder deaktivieren möchten.

WM_COMMAND:
  if(HIWORD(wp) = EN_CHANGE) and (LOWORD(wp) = IDC_IPCTRL) then
  begin
    { ... }
  end;