Урок 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 | |
|