----- ネットワーク プログラムでは、ユーザーが IP アドレスの入力を要求される状況によく遭遇します。ただし、Delphi には IP 文字列の入力に使用できるコントロールが提供されていないため、Tedit コントロール (単一行のテキスト ボックス) を使用して、ユーザーが入力した IP 文字列を受け入れる必要があります。ただし、Tedit を使用して IP 文字列を入力するのは、扱いが非常に不便であるため、お勧めできません。実際、図に示すように、IP 文字列を入力するための Windows コントロールがすぐそばにあります。 IP コントロールは不正な IP 文字列を拒否します (各部分には 0 ~ 255 の数値のみを入力できます)。これにより、コントロール内の IP 文字列に対応する IP 値 (32 ビット整数) を簡単に取得できます。 IP 文字列と IP 値の間で変換する手間が省け、さらに、IP コントロールに入力できる IP の範囲を制限することもできます。この記事では、Delphi プログラムで Windows IP コントロールを使用する方法を紹介します。
---- Windows には、Windows のカスタム コントロール ライブラリ (Windows コモン コントロール) である commctrl.dll と comctl32.dll という 2 つの非常に重要なダイナミック リンク ライブラリがあります。カスタム コントロール ライブラリには、Delphi でステータスバー、クールバー、ホットキーなど、一般的に使用される Windows コントロールが多数含まれており、これらのコントロールのほとんどはビジュアル コントロールとしてパッケージ化されています。 Microsoft が Internet Explorer 3 を発表した後、Windows IP コントロール (IP アドレス編集コントロール) など、いくつかの新しいコントロールがカスタム コントロール ライブラリに追加されました。
---- Windows カスタム コントロール ライブラリを初期化します
---- Windows には、カスタム コントロール ライブラリを初期化するための 2 つの API 関数、InitCommonControls と InitCommonControlsEx が提供されています。名前から、これら 2 つの API 関数の関係を理解するのは難しくありません。後者は前者の機能強化です。プログラムで IP コントロールを使用する場合は、InitCommonControlsEx を使用してカスタム コントロール ライブラリとクラスの初期化を完了する必要があります。関数 InitCommonControlsEx のプロトタイプは次のとおりです (Pascal 構文)。
----...
---- IP コントロールの作成
----...
---- IP制御を使用します。 プログラムでは、IP コントロールにメッセージを送信して通信します。 IP コントロールは次の 6 つのメッセージに応答できます。これらのメッセージとその意味を以下の表に示します。
----...
---- IP コントロールの IP 文字列に対応する IP 値を取得したい場合は、IPM_GETADDRESS メッセージを IP コントロールに送信する必要があり、SendMessage の最後のパラメータとして 32 ビット整数アドレスを使用する必要があります。 。
----...
---- IP制御の通知メッセージ
---- IP 文字列が変更されるか、入力フォーカスが転送されると、IP コントロールは通知メッセージ IPN_FIELDCHANGED を親ウィンドウに送信します。ほとんどの場合、この通知メッセージは無視してかまいません。以下は、通知メッセージ 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{...の処理IP 制御 IPN_FIELDCHANGED 通知メッセージ...} end;end;end;