Выбор базового класса. Создание модуля компонента.
После нажатия кнопки ОК к текущему проекту добавляется сформированный Delphi-модуль, представляющий собой заготовку (шаблон) модуля компонента. Текст этого модуля приведен в листинге 16.1.
Листинг 16.1. Шаблон модуля компонента.
unit NkEdit; interface uses Windows, Messages, SysUtils, Classes, Controls, StdCTRLs; type TEdit1 = class (TEdit) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TNkEdit]); end; end.
В объявлении нового класса указан только тип родительского класса. В раздел реализации помещена процедура Register, которая используется во время установки созданного программистом компонента на указанную вкладку палитры компонентов Delphi для регистрации нового класса.
В сформированное Delphi объявление класса нового компонента нужно внести дополнения: объявить свойство, поле данных этого свойства, функцию доступа к полю данных, процедуру установки значения поля данных, конструктор и деструктор. Если на некоторые события компонент должен реагировать не так, как базовый, то в объявление класса нужно поместить описание соответствующих процедур обработки событий.
В листинге 16.2 приведен текст модуля компонента NkEdit после внесения всех необходимых изменений.
Листинг 16.2. Модуль компонента NkEdit.
unit NkEdit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs; type TNkEdit = class(TEdit) private FNumb: single; // число, находящееся в поле редактирования // Это описание функции доступа // и процедуры установки поля FNumb function GetNumb: single; procedure SetNumb(value:single); protected procedure KeyPress(var Key: Char); override; public published constructor Create(AOwner:TComponent); override; property Numb: single // свойство компонента read GetNumb write SetNumb; end; procedure Register; implementation // процедура регистрации компонента procedure Register; begin RegisterComponents('Samples',[TNkEdit]); end;