Написание процедуры и функции.
Редактирование директив
Директива Private. Здесь необходимо писать все скрытые поля которые могут понадобятся для создания компоненту. Так же в этой директиве описываются процедуры и функции, необходимые для работы компонента, эти процедуры и функции пользовательские не доступные. Для нашего компонент мы напишем здесь следующее (запись должна состоять из буквы "F" имени поля : тип этого поля) :
FCount: integer;
Буква "F" должна присутствовать обязательно. Здесь мы создали скрытое поле Count, в котором и будет храниться число кліків по кнопке.
Директива Protected. Обычно здесь описываются разные обработчики событий мыши и клавиатуры. Мы напишем здесь такую строку:
procedure Click; override;
Это указывает на то, что мы будем обрабатывать клик мышью по компоненту. Слово "override" указывает на то, что мы перекроем стандартное событие OnClick для компонента предка.
Директива Public. Описываются те процедуры и функции компонента, которые будут доступны пользователю. (Например, в процессе написания кода вы пишете имя компонента, ставите точку и перед вами список доступных функций, объявленных в директиве Public). Для нашего компонента, чтобы показать принцип использования этой директивы создать функцию - ShowCount, которая покажет сообщение, сообщая пользователю сколько раз он уже нажал на кнопку. Для этого в директиве Public написать такой код:
procedure ShowCount;
Директива Published. В ней также используется объявление доступных пользователю, свойств и методов компонента. Для того, чтобы наш компонент появился на форме необходимо описать метод создания компонента (конструктор), можно прописать и деструктор, но это не обязательно. Следует обратить внимание на то, что когда вы хотите, чтобы какие-то свойства вашего компоненту появились у инспектор объектов (Object Inspector) вам необходимо описать эти свойства в директиве Published. Это делается так:
property Імя_свойства (но помните здесь букву "F" уже не нужно писать), потом ставится двоеточие ":" тип свойства, read процедура для чтения значения, write функция для записи значения;.
Написать для нашего компоненты:
constructor Create (aowner: Tcomponent); override; / / Конструктор
property Count : integer read FCount write FCount; / / Свойство Count
Написание процедуры и функции.
1.Созданіе конструктора.
constructor TCountBtn.Create (aowner: Tcomponent);
begin
inherited create (Aowner);
end;
Сюда можно записывать любые действия, какие вы хотите сделать в самом начале работы компонента, то есть в момент установки компонента на форму. Например, можно установить начальное значение нашего свойства Count.
2. Процедуру обработки клику мышкой по кнопке:
procedure Tcountbtn.Click;
begin
inherited click;
FCount: = FCount 1;
end;
"Inherited click" значит, что повторяются стандартные методы обработки щелкания мышью.
3. Процедура ShowCount.
procedure TCountBtn.ShowCount;
begin
Showmessage ( 'За кнопке' + caption + 'вы сделали:' + inttostr (FCount) + 'клик (а / ів)');
end;
Здесь появляется сообщение, в котором показывается количество кліків по кнопке.
Должно выйдет следующее:
unit CountBtn;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TCountBtn = class (TButton)
private
(Private declarations)
FCount: integer;
protected
(Protected declarations)
procedure Click; override;
public
(Public declarations)
procedure ShowCount;
published
(Published declarations)
property Count : integer read FCount write FCount;
constructor Create (aowner: Tcomponent); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents ( 'Mihan Components ', [TCountBtn]);
end;
constructor TCountBtn.Create (aowner: Tcomponent);
begin
inherited create (Aowner);
end;
procedure Tcountbtn.Click;
begin
inherited click;
FCount: = FCount 1;
end;
procedure TCountBtn.ShowCount;
begin
Showmessage ( 'За кнопке' + caption + 'вы сделали:' + inttostr (FCount) + 'клик (а / ів)');
end;
end.
Сохранить проект.
3. Установка компонента
1. В главном меню выбрать пункт Component -> Install Component (Компонент> Установка компонента). перед вами откроется диалоговое окно Install Component (Установка компонента). В нем вы увидите две вкладки: Into exsisting Package (В существующий пакет) и Into new Package (В новый пакет). Вам предоставляется выбор установить ваш компонент в уже существующий пакет или к новому пакету соответственно. Выбрать в уже существующий пакет.
2. В поле Unit File Name (Файл модуля) написать имя сохраненного модуля (естественно необходимо еще и указать путь к нему), а лучше воспользуйтесь кнопкой Browse и выбрать ваш файл в окне, которое открылось.
3. В Search Path (Путь поиска) ничего изменять не нужно.
4. В поле Package File Name (Файл пакета) выбрать имя пакета, в который будет установлен ваш компонент. Оставить за умалчиванием.
Рисунок 2. Установка пакета
5. Нажать кнопочку Ok. Появиться предупреждение Package dclusr30.dpk will be rebuilt. Continue?: "Пакет такой-то будет изменен. Продолжить"?. Ответить "Да". И если все сделали правильно, то появиться сообщение, что ваш компонент установлен.
4 .Созданіе свойств своего типу
Создать свойство нестандартного типа.
Рассмотрим это на примере метки - TLabel. У этого компонента есть такое свойство: Alignment. Оно может принимать следующие значения: taLeftJustify, taCenter, taRightJustify. Создадим свойства. Свойство будет называться ShowType (тип TShowTp), в нашем компоненте он будет отвечать за отображение свойства Count. Если пользователь установит свойство ShowType в Normal, то кнопка будет работать, как и работала. А если пользователь присвоит этому свойству значения CountToCaption, то количество кліків, будет отображаться на самой кнопке.
1. Объявить новый тип. Описание типа нужно прибавить после слова Type. Вот так это выглядело сначала:
type
TCountBtn = class (TButton)
Вот так это должно выглядеть:
type
TShowTp = (Normal, CountToCaption);
TCountBtn = class (TButton)
Здесь объявлено новый тип TShowTp, который может принимать только два значения. Все значения, которые необходимо прибавить перечисляются через кому.
2. Создание полі этого типу. В директиву Private написать:
FShowType: TShowTp;
Создано поле ShowType, типа TShowTp.
3. Прибавить это свойство в инспектор объектов :
property ShowType : TshowTp read FshowType write FShowType;
4. Чтобы компонент реагировал на изменение этого свойства пользователем надо слегка изменить обработчик события OnClick. После небольшой модификации он может иметь такой вид:
procedure Tcountbtn.Click;
begin
inherited click;
FCount: = Fcount 1;
if ShowType = Normal then
Caption: = Caption;
if ShowType = CountToCaption then
Caption: = 'Count =' + inttostr (count);
end;
Сначала увеличивается счетчик на единицу. Потом проверяется, какое значение имеет свойство ShowType. Если Normal, то ничего не делаем, а если CountToCaption, то в надпись на кнопке выводится количеством кліків.
Имплантация таймера в компонент
Вставить в компонент, таймер, так, что через каждые 10 секунд значение счетчика кліків будет удваиваться. Для этого вмонтировал таймер в кнопку.
1. После раздела uses, где описаны прибавленные в программу модули, объявить переменную типа TTimer. Назвать ее Timer:
unit CountBtn;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
var Timer : TTimer;
type
2. В директиву Protected необходимо прибавить обработчик события OnTimer для таймера. Это делается так:
procedure OnTimer (Sender: TObject);
Поскольку наш таймер это не переменная, а компонент, его тоже надо создать, для этого в конструктор кнопки написать:
constructor TCountBtn.Create (aowner: Tcomponent);
begin
inherited create (Aowner);
Timer: = TTimer.Create (self);
Timer.Enabled: = true;
Timer.OnTimer: = OnTimer;
Timer.Interval: = 10000;
end;
Здесь создается экземпляр таймера и его свойства Iterval (измеряется в миллисекундах) присваивается значение 10000 (10 секунд).
3. Написать процедуру OnTimer.
procedure TCountBtn.OnTimer (Sender: TObject);
begin
FCount: = FCount * 2;
end;
Вот приблизительно то, что у вас должен выйти в конце :
unit CountBtn;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
var Timer : TTimer;
type
TShowTp = (Normal, CountToCaption);
TCountBtn = class (TButton)
private
(Private declarations)
FCount: integer;
FShowType: TShowTp;
protected
(Protected declarations)
procedure OnTimer (Sender: TObject);
procedure Click; override;
public
(Public declarations)
procedure ShowCount;
published
(Published declarations)
property Count : integer read FCount write FCount;
constructor Create (aowner: Tcomponent); override;
property ShowType : TshowTp read FshowType write FShowType;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents ( 'Mihan Components ', [TCountBtn]);
end;
constructor TCountBtn.Create (aowner: Tcomponent);
begin
inherited create (Aowner);
Timer: = TTimer.Create (self);
Timer.Enabled: = false;
Timer.OnTimer: = OnTimer;
Timer.Interval: = 1000;
end;
procedure Tcountbtn.Click;
begin
inherited click;
FCount: = Fcount 1;
Timer.Enabled: = true;
if ShowType = Normal then
Caption: = Caption;
if ShowType = CountToCaption then
Caption: = 'Count =' + inttostr (count);
end;
procedure TCountBtn.ShowCount;
begin
Showmessage ( 'За кнопке' + caption + 'вы сделали:' + inttostr (FCount) + 'клик (а / ів)');
end;
procedure TCountBtn.OnTimer (Sender: TObject);
begin
FCount: = FCount * 2;
end;
end.
Если у вас что-то не сработало, то в начале проверьте или все у вас написаны правильно. Потом проверьте может у вас не хватает какого-то модуля в разделе Uses.
<== предыдущая лекция | | | следующая лекция ==> |
НАЗНАЧЕНИЕ ОЧИСТИТЕЛЬНОГО ОБОРУДОВАНИЯ | | | Цели внедрения системы электронного документооборота |
Дата добавления: 2016-02-27; просмотров: 574;