![]() КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Создание свойств своего типа⇐ ПредыдущаяСтр 19 из 19 Теперь мы попробуем создать свойство нестандартного типа. Рассмотрим это на примере метки - 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; Вначале мы увеличиваем счетчик на единицу. Затем проверяем какое значение имеет свойство 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 секунд если по простому). procedure TCountBtn.OnTimer(Sender: TObject); begin FCount:=FCount*2; end; Вот примерно то, что у вас должно получиться в конце: unit CountBtn;
|