----- В сетевых программах мы часто сталкиваемся с ситуациями, когда от пользователей требуется ввод IP-адресов. Однако Delphi не предоставляет нам элемента управления, который можно использовать для ввода строки IP, поэтому нам приходится использовать элемент управления Tedit (однострочное текстовое поле), чтобы принять строку IP, введенную пользователем. Однако использовать Tedit для ввода строки IP — не лучшая идея, поскольку с ней очень неудобно обращаться. На самом деле рядом с нами есть элемент управления Windows специально для ввода IP-строк, как показано на рисунке. Элемент управления IP будет отклонять недопустимые строки IP (в каждую часть можно вводить только числа от 0 до 255). Это позволяет легко получить значение IP (32-битное целое число), соответствующее строке IP в элементе управления This This. избавляет вас от необходимости конвертировать строки IP в значения IP, кроме того, вы также можете ограничить диапазон IP-адресов, которые можно ввести в элемент управления IP; В этой статье я покажу вам, как использовать элементы управления Windows IP в наших программах Delphi.
---- В Windows есть две очень важные библиотеки динамической компоновки: commctrl.dll и comctl32.dll, которые являются пользовательскими библиотеками элементов управления Windows (общие элементы управления Windows). Библиотека настраиваемых элементов управления содержит множество часто используемых элементов управления Windows, таких как Statusbar, Coolbar, HotKey и т. д. в Delphi, большинство этих элементов управления упакованы как визуальные элементы управления. После того, как Microsoft выпустила Internet Explorer 3, в библиотеку настраиваемых элементов управления были добавлены некоторые новые элементы управления, включая элемент управления Windows IP (элемент управления редактированием IP-адреса).
---- Инициализация пользовательской библиотеки управления Windows
---- Windows предоставляет две функции API, InitCommonControls и InitCommonControlsEx, для инициализации пользовательских библиотек элементов управления. Из названий нетрудно увидеть связь между этими двумя функциями API: последняя является развитием первой. Если вы хотите использовать элементы управления IP в своей программе, вы должны использовать InitCommonControlsEx для завершения инициализации пользовательских библиотек и классов элементов управления. Прототип функции InitCommonControlsEx следующий (синтаксис Pascal):
----...
---- Создать IP-контроль
----...
---- Используйте IP-контроль. В программе мы общаемся с IP-контролем, отправляя ему сообщения. IP-управление может реагировать на следующие шесть сообщений. Эти сообщения и их значения показаны в таблице ниже:
----...
---- Если вы хотите получить значение IP, соответствующее строке IP в элементе управления IP, вам следует отправить сообщение IPM_GETADDRESS в элемент управления IP и использовать 32-битный целочисленный адрес в качестве последнего параметра SendMessage. .
----...
---- Уведомление об IP-контроле
---- При изменении строки IP или переносе фокуса ввода элемент управления IP отправит сообщение уведомления IPN_FIELDCHANGED в свое родительское окно. В большинстве случаев мы можем игнорировать это уведомление. Ниже приведен пример обработки сообщения уведомления IPN_FIELDCHANGED:
PROcedure Tform1.WndProc(var Msg: TMessage);var p:PNMHDR;begininherited; if Msg.Msg=WM_NOTIFYthen start p:=Pointer(Msg.lParam); if p^.code=IPN_FIELDCHANGED then start{...обработка IP контролирует сообщение уведомления IPN_FIELDCHANGED...} end;end;end;