- •Новые технологии.
- •Создание новых компонент
- •Добавление свойств
- •Добавление методов
- •Добавление событий
- •Разработка ресурсов для компоненты
- •Установка компоненты
- •Испытание компоненты
- •Редактирование компоненты
- •Создание справочной службы помощи
- •Динамически подключаемые библиотеки (dll)
- •Работа с буфером обмена
- •Динамический обмен данными (dde)
- •Связывание и внедрение объектов (ole)
- •Упражнения:
-
Добавление свойств
У нашего компонента должно быть два свойства - min и max для задания минимальной и максимальной границ для выдаваемого случайного числа. Делаем это следующим образом:
...
TRandom = class(TLabel)
private
{ Private declarations }
Fmin: Integer;
Fmax: Integer;
...
published
{ Published declarations }
property min: Integer read Fmin write Fmin;
property max: Integer read Fmax write Fmax;
end;
...
Свойство min (и абсолютно аналогичное свойство max) мы заводим следующим образом - во-первых, мы объявляем в классе закрытую переменную Fmin нужного типа и во-вторых, мы в разделе published нашего класса объявляем само свойство. Свойство объявляется с помощью ключевого слова property, за которым следует имя свойства (min), его тип (Integer в данном случае) и как мы это свойство читаем и записываем. Так как наше свойство min это, фактически, внутренняя переменная Fmin, то после слов read и write мы соответственно пишем имя этой переменной класса. Так как мы поместили свойства в published-секцию нашего класса, то эти свойства появятся в Инспекторе объектов. Если нам надо сделать свойство только для чтения или только для записи, то в этом случае надо писать лишь части read или write, соответственно.
Заметьте, кстати, что имена внутренних полей принято начинать на букву F - чтобы сразу было понятно, что это имя поля.
-
Добавление методов
Сначала мы должны объявить новый метод в классе компоненты. Это мы сделаем в public, так как наш метод должен вызываться извне:
type TRandom = class(TLabel)
...
public { Public declarations }
Function GetNumber: Integer;
...
End;
Function TRandom.GetNumber: Integer; var i: Integer;
begin
Randomize;
//Получаем случайное число от Fmin до FMax.
i:= System.Random(Fmax - Fmin + 1)+ Fmin;
//Выводим результат на компонент.
self.Caption := IntToStr (i);
//Возвращаем результат.
Result:=i;
end;
Отметим, что мы используем полное имя для функции System.Random, чтобы не было конфликта с именем нашего модуля. Добавленная нами функция выведет случайное число на компоненту и вернет его в качестве возвращаемого значения.
-
Добавление событий
Добавим событие, которое будет наступать, когда выдаваемое методом GetNumber случайное число будет максимальным (т. е. равным max). При использовании нашего компонента можно будет в обработчике этого события написать все что угодно. Этим будет заниматься не наш компонент, а программа, использующая его.
Объявим наше событие в private-области нашего класса:
TRandom = class(TLabel)
private { Private declarations }
// Объявление события.
FGetMax: TNotifyEvent;
Далее опубликуем наше событие - для того, чтобы оно появлялось в Инспекторе объектов Delphi:
published { Published declarations } ...
// Публикация события.
property OnGetMax: TNotifyEvent read FGetMax write FGetMax;
При использовании нашей компоненты это событие будет видно под именем OnGetMax.
Перед возбуждением события мы проверяем, а был ли ему вообще назначен обработчик. Это мы делаем в выражении Assigned(FGetMax):
Function TRandom.GetNumber: Integer;
...
begin
...
i:= System.Random(Fmax - Fmin + 1)+ Fmin;
// Возбуждение события.
if (Assigned(FGetMax) and (i = Fmax)) then FGetMax(self);
Наш компонент почти готов для применения (но сначала необходимо сохранить файл с компонентом на жестком диске.). Осталось одно но- это вставить картинку для отображения нашей новой компоненты на Палитры компонентов.