Иллюстрированный самоучитель по Delphi 7 для профессионалов

Создание нового компонента на базе элементов управления из библиотеки ComCtl32

Элемент управления обрабатывает шесть сообщений (см. документацию MSDN), которые сведены в табл. 5.8.

Таблица 5.8. Сообщения, обрабатываемые элементом управления IP Address Control.

Сообщение Назначение
IPM CLEARADDRESS Очистить поле адреса
IPM GETADDRESS Считать адрес
IPM_ISBLANK Проверить, не пустое ли поле адреса
IPM SETADDRESS Установить адрес
IPM_SETFOCUS Передать фокус заданному полю элемента управления
IPM_SETRANGE Установить ограничения на значения в заданном поле

Кроме перечисленных, IP-редактор извещает приложение об изменениях, произведенных пользователем, путем посылки ему сообщения WM_NOTIFY.

Следует иметь в виду, что IP-редактор не является потомком обычного редактора (TCustomEdit) и не обрабатывает характерные для того сообщения ЕМ_ХХХХ, так что название TCustomipEdit отражает только внешнее сходство.

В создаваемом коде компонента первым делом нужно переписать конструктор Create и метод createParams. Последний метод вызывается перед созданием окна для установки его будущих параметров. Именно здесь нужно инициализировать библиотеку общих элементов управления ComCtl32 и породить новый класс окна.

constructor TIPEditor.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle: = [csCaptureMouse, csClickEvents, csDoubleClicks, csOpaque];
Color: = clBtnFace;
Width: = 160;
Height: = 25;
Align: = alNone;
end;
procedure TIPEditor.CreateParams(var Params: TCreateParams);
begin
InitCommonControl(ICC_INTERNET_CLASSES);
inherited CreateParams(Params);
CreateSubClass(Params, WC_IPADDRESS);
end;

После создания свое значение получает дескриптор окна Handle (это свойство унаследовано от TwinControl). Все чтение/запись свойств элемента происходит путем обмена сообщениями с использованием этого дескриптора. Минимально необходимыми для работы являются свойства IP (задает IP-адрес в редакторе), ipstring (отображает его в виде текстовой строки) и процедура clear (очищает редактор).

Реализовано это следующим образом.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.