Урок 84 - Создание своих компонентов (часть 2/3)

Начнем с написания конструктора. Это делается примерно так:

constructor TCountBtn.Create(aowner:Tcomponent);
begin
 inherited create(Aowner);
end;
Здесь в принципе понимать ничего не надо. Во всех своих компонентах я писал именно это (только класс компонента менял и все). Также сюда можно записывать любые действия, которые вы хотите сделать в самом начале работы компонента, то есть в момент установки компонента на форму. Например можно установить начальное значение нашего свойства Count. Но мы этого делать не будем. Теперь мы напишем процедуру обработки щелчка мышкой по кнопке:
procedure Tcountbtn.Click;
begin
  inherited click;
  FCount:=FCount+1;
end;
"Inherited click" означает, что мы повторяем стандартные методы обработки щелчка мышью (зачем напрягаться и делать лишнюю работу:)). У нас осталась последняя процедура 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.
Скорее сохраняйтесь, дабы не потерять случайным образом байты набранного кода:)).

Если вы сумели написать и понять, все то что здесь предложено, то установка компонента не должна вызвать у вас никаких проблем. Все здесь делается очень просто. В главном меню выберите пункт Component -> Install Component. перед вами открылось диалоговое окно Install Component. В нем вы увидите две закладки: Into exsisting Package и Into new Package. Вам предоставляется выбор установить ваш компонент в уже существующий пакет или в новый пакет соответственно. Мы выберем в уже существующий пакет.

В поле Unit File Name напишите имя вашего сохранненого модуля (естественно необходимо еще и указать путь к нему), а лучше воспользуйтесь кнопкой Browse и выберите ваш файл в открывшемся окне.
В Search Path ничего изменять не нужно, Делфьи сама за вас все туда добавит.
В поле Package File Name выберите имя пакета, в который будет установлен ваш компонент. Мы согласимся с предложенным по умолчанию пакетом.
Теперь нажимаем кнопочку Ok. И тут появиться предупреждение Package dclusr30.dpk will be rebuilt. Continue? Дельфи спрашивает: "Пакет такой-то будет изменен. Продолжить?". Конечно же надо ответить "Да". И если вы все сделали правильно, то появиться сообщение, что ваш компонент установлен. Что ж можно кричать Ура! Это ваш первый компонент.

Создание свойств своего типа Теперь мы попробуем создать свойство нестандартного типа. Рассмотрим это на примере метки - TLabel. У этого компонента есть такое свойство: Alignment. Оно может принимать следующие значения: taLeftJustify, taCenter, taRightJustify. Приступаем к созданию свойства. Ничего интересного мне придумать не удалось, но тем не менее я вам покажу это на примере того свойства, которое я придумал. Оно очень простое и поможет вам разобраться. Свойство будет называться ShowType (тип TShowTp), в нашем компоненте оно будет отвечать за отображение свойства Count. Если пользователь установит свойство ShowType в Normal, то кнопка будет работать, как и работала. А если пользователь присвоит этому свойтсву значение CountToCaption, то количество кликов, будет отображаться на самой кнопке.
Для начале нам необходимо объявить новый тип. Описание типа нужно добавить после слова Type. Вот так это выглядело вначале:
type
TCountBtn = class(TButton)
Вот так это должно выглядеть:
type
 TShowTp = (Normal, CountToCaption);
 TCountBtn = class(TButton)
Здесь мы объявили новый тип TShowTp, который может принимать только два значения. Все значения, которые вы хотите добавить перечисляются через запятую. Теперь нам понадобиться создать поле этого типа. Это мы уже умеем и делать и поэтому не должно вызвать никаких сложностей. В директиву Private напишите:
FShowType:TShowTp;
Мы создали поле ShowType, типа TShowTp. Конечно же необходимо добавить это свойство в инспектор объектов:
property ShowType: TshowTp read FshowType write FShowType;
Ну и наконец, чтобы наш компонент реагировал на изменение этого свойства пользователем надо слегка изменить обработчик события 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;
Удачи!
Встретимся в следующем уроке!



    No results found.
Отменить.