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




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


Кроме перечисленных, 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 (очищает редактор).

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

 Листинг 5.2. Исходный код компонента TCustomlPEdit 

unit uIPEdit; 

interface

uses

Windows, Messages, SysUtils, Classes, Controls;

type

TCustomlPEdit = class(TWinControl)

 private

{ Private declarations }

 FIPAddress: DWORD;

 FIPLimits: array [0..3] of word;

 FCurrentField : Integer;

//procedure CMWantSpecialKey(var Msg: TCMWantSpecialKey);

 message CM_WANTSPECIALKEY;

procedure WMGetDlgCode(var Message: TWMGetDlgCode);




Содержание  Назад  Вперед