Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа6.doc
Скачиваний:
3
Добавлен:
06.11.2018
Размер:
238.59 Кб
Скачать
    1. Добавление свойств

У нашего компонента должно быть два свойства - 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 - чтобы сразу было понятно, что это имя поля.

    1. Добавление методов

Сначала мы должны объявить новый метод в классе компоненты. Это мы сделаем в 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, чтобы не было конфликта с именем нашего модуля. Добавленная нами функция выведет случайное число на компоненту и вернет его в качестве возвращаемого значения.

    1. Добавление событий

Добавим событие, которое будет наступать, когда выдаваемое методом 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);

Наш компонент почти готов для применения (но сначала необходимо сохранить файл с компонентом на жестком диске.). Осталось одно но- это вставить картинку для отображения нашей новой компоненты на Палитры компонентов.