----- 네트워크 프로그램에서 사용자가 IP 주소를 입력해야 하는 상황이 자주 발생합니다. 그러나 Delphi는 IP 문자열을 입력하는 데 사용할 수 있는 컨트롤을 제공하지 않으므로 사용자가 입력한 IP 문자열을 수락하려면 Tedit 컨트롤(한 줄 텍스트 상자)을 사용해야 합니다. 그러나 Tedit를 사용하여 IP 문자열을 입력하는 것은 처리가 매우 불편하기 때문에 좋은 생각이 아닙니다. 실제로 그림에 표시된 것처럼 IP 문자열을 입력하기 위한 Windows 컨트롤이 우리 옆에 있습니다. IP 컨트롤은 불법 IP 문자열을 거부합니다(각 부분에 0~255 사이의 숫자만 입력할 수 있음). 이를 통해 컨트롤의 IP 문자열에 해당하는 IP 값(32비트 정수)을 쉽게 얻을 수 있습니다. IP 문자열과 IP 값을 변환하는 수고를 덜고 IP 제어에 입력할 수 있는 IP 범위를 제한할 수도 있습니다. 이 글에서는 Delphi 프로그램에서 Windows IP 컨트롤을 사용하는 방법을 소개하겠습니다.
---- Windows에는 Windows의 사용자 정의 컨트롤 라이브러리(Windows Common Controls)인 commctrl.dll과 comctl32.dll이라는 두 가지 매우 중요한 동적 링크 라이브러리가 있습니다. 사용자 정의 컨트롤 라이브러리에는 Delphi에서 Statusbar, Coolbar, HotKey 등과 같이 일반적으로 사용되는 많은 Windows 컨트롤이 포함되어 있으며 이러한 컨트롤의 대부분은 시각적 컨트롤로 패키지되어 있습니다. Microsoft가 Internet Explorer 3을 출시한 후 Windows IP 컨트롤(IP 주소 편집 컨트롤)을 포함하여 몇 가지 새로운 컨트롤이 사용자 지정 컨트롤 라이브러리에 추가되었습니다.
---- Windows 사용자 정의 컨트롤 라이브러리 초기화
---- Windows는 사용자 정의 컨트롤 라이브러리를 초기화하기 위해 InitCommonControls 및 InitCommonControlsEx라는 두 가지 API 함수를 제공합니다. 이름에서 이 두 API 함수 간의 관계를 확인하는 것은 어렵지 않습니다. 후자는 전자의 향상된 기능입니다. 프로그램에서 IP 컨트롤을 사용하려면 InitCommonControlsEx를 사용하여 사용자 지정 컨트롤 라이브러리 및 클래스의 초기화를 완료해야 합니다. InitCommonControlsEx 함수의 프로토타입은 다음과 같습니다(파스칼 구문):
----...
---- 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 p:=Pointer(Msg.lParam); if p^.code=IPN_FIELDCHANGED then start{... IP는 IPN_FIELDCHANGED 알림 메시지를 제어합니다...} end;end;end;