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

Объясню что произошло. Вначале мы увеличиваем счетчик на единицу. Затем проверяем какое значение имеет свойство ShowType. Если Normal, то ничего не делаем, а если CountToCaption, то в надпись на кнопке выводим количество кликов. Не так уж и сложно как это могло показаться с первого раза. Имплантируем таймер в компонент Очень часто бывает, что вам необходимо вставить в компонент, какой-нибудь другой компонент, например, таймер. Как обычно будем рассматривать этот процесс на конкретном примере. Сделаем так, что через каждые 10 секунд значение счетчика кликов будет удваиваться. Для этого мы встроим таймер в нашу кнопку. Нам понадобиться сделать несколько несложных шагов.

После раздела uses, где описаны добавленные в программу модули, объявите переменную типа TTimer. Назовем ее Timer. Приведу небольшой участок кода:

unit CountBtn;

interface
        
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;
        
var Timer: TTimer;
type
Дальше в директиву 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 секунд если по простому). Собственно осталось написать саму процедуру 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.

Переустановка компонента
Очень часто бывает необходимо переустановить ваш компонент. Если вы попробуете сделать это путем выбора Component->Install Component, то Дельфи вас честно предупредит о том, что пакет уже содержит модуль с таким именем. Перед вами открывается окно с содержимым пакета. В нем вы должны найти имя вашего компонента и удалить его (либо нажать кнопочку Remove). Теперь в пакете уже нет вашего компонента. Затем проделайте стандартную процедуру по установке компонента.

Удачи!
Встретимся в следующем уроке!




Добавил(а): RinDproramer Дата: 2013-09-03
Как называется компонент, который есть в самом Delphi(среда разр.), где расположены вкладки, а точнее этот компонент изображает вкладки?



Добавил(а): RinDproramer Дата: 2013-09-03
Как называется компонент, который есть в самом Delphi(среда разр.), где расположены вкладки, а точнее этот компонент изображает вкладки?



Добавил(а): RinDproramer Дата: 2013-09-03
Ой, случайно два раза написал.



Добавил(а): мультик Дата: 2013-09-25



Добавил(а): Denismen Дата: 2013-09-27


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