![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Такой вопросик. Можно ли создав свой класс на основе TTimer написать свой обработчик процедуры onTimer. Как это сделать, что то у меня выскакивают ошибки при использовании моего класса.
Код:
type TLabelTimer = class(TTimer) private A:boolean; T1:TTimer; protected procedure onTimer(Component: TLabeledEdit); procedure Ed_L_Style_Red(Component: TLabeledEdit); procedure Ed_L_Style_Custom(Component: TLabeledEdit); public constructor Create(mSec:Integer;Form:TForm;LabelEdit:TComponent); published end; THintTimer = class(TTimer) private procedure HintTLabeledEdit(Component: TLabeledEdit;S:String;Form:TForm); protected H:THintWindow; Lab:TLabelTimer; HintRec:TRect; procedure onTimer(Component: TLabeledEdit); procedure Hint_Clear(); public constructor Create(mSec:Integer;Form:TForm;LabelEdit:TComponent);// override; procedure Start(Massage:string); // destructor Destroy; override; published end; Код:
{ THintTimer } constructor TLabelTimer.Create(mSec:Integer;Form:TForm;LabelEdit:TComponent); begin inherited Create(Form); Self.Interval:=mSec; A:=false;// ïåðåêëþ÷àëêà end; procedure TLabelTimer.Ed_L_Style_Custom(Component: TLabeledEdit); begin Component.EditLabel.Font.Color:=$00000000; Component.EditLabel.Font.Style:=Component.EditLabel.Font.Style-[fsBold]; end; procedure TLabelTimer.Ed_L_Style_Red(Component: TLabeledEdit); begin Component.EditLabel.Font.Color:=$000000FF; Component.EditLabel.Font.Style:=Component.EditLabel.Font.Style+[fsBold]; end; procedure TLabelTimer.onTimer(Component: TLabeledEdit); begin inherited Timer; if A then begin Ed_L_Style_Red(Component); A:=false; end else begin Ed_L_Style_Custom(Component); A:=true; end; end; procedure THintTimer.onTimer(Component: TLabeledEdit); begin Hint_Clear; Lab.Ed_L_Style_Custom(Component); Destroy; end; procedure THintTimer.Hint_Clear; begin if h<>nil then H.ReleaseHandle; end; procedure THintTimer.Start(Massage:string); begin H.ActivateHint(HintRec,Massage); Self.Enabled:=true; Lab.Enabled:=true; end; { THintTimer } constructor THintTimer.Create(mSec:Integer;Form:TForm;LabelEdit:TComponent); begin inherited Create(Form); H:=THintWindow.Create(Form); Lab:=TLabelTimer.Create(mSec,Form,LabelEdit); end; procedure THintTimer.HintTLabeledEdit(Component: TLabeledEdit;S:String;Form:TForm); begin HintRec.Left:=Form.Left+Component.Left; HintRec.Top:=Form.Top+Component.Top-20; HintRec.Right:=Form.Left+Component.Left+Length(S)*5; HintRec.Bottom:=Form.Top+Component.Top+10; end; Код:
var Hint:THintTimer; Hint.Start('gggggggggggggg'); Hint.OnTimer(Self); |
#2
|
||||
|
||||
![]() С ума сойти. И что это всё должно означать?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
![]() В OnTimer и так пишется свой обработчик. Думаю, проще использовать WinAPI'шные таймеры, если нужно другое, чем пытаться из сложного сделать простое путем усложнения.
![]() jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
|||
|
|||
![]() PHP код:
|
#5
|
||||
|
||||
![]() Создаю класс в котором помещаю переменную типа TTimer. Как мне тогда добраться до её(переменной TTimer) поцедуры onTimer, чтобы туда записать действия, которые будут происходить при наступлении этого события(onTimer)?
|
#6
|
||||
|
||||
![]() Цитата:
|
#7
|
||||
|
||||
![]() Код:
type TWhatTimer = class private FTimer: TTimer; FLabeledEdit: TLabeledEdit; procedure SetOnTimer(Sender: TNotifyEvent); procedure InnerOnTimer(Sender: TObject); public property OnTimer: TNotifyEvent write SetOnTimer; constructor Create(ALabeledEdit: TLabeledEdit); destructor Destroy; override; end; constructor TWhatTimer.Create(ALabeledEdit: TLabeledEdit); begin inherited Create; FLabeledEdit:=ALabeledEdit; FTimer:=TTimer.Create(nil); FTimer.Interval:=500; FTimer.OnTimer:=InnerOnTimer; // назначаем внутренний обработчик (default) end; destructor TWhatTimer.Destroy; begin FTimer.Free; inherited Destroy; end; procedure TWhatTimer.InnerOnTimer(Sender: TObject); begin // внутренний обработчик событий FLabeledEdit.Text:=IntToStr(FLabeledEdit.Tag); FLabeledEdit.Tag:=FLabeledEdit.Tag+1; end; procedure TWhatTimer.SetOnTimer(Sender: TNotifyEvent); begin if Assigned(Sender) then FTimer.OnTimer:=Sender else FTimer.OnTimer:=InnerOnTimer; end; использование: Код:
TForm1 = class(TForm) LabeledEdit1: TLabeledEdit; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure TForm1.FormCreate(Sender: TObject); begin FWhatTimer:=TWhatTimer.Create(LabeledEdit1); // создаем TWhatTimer end; procedure TForm1.FormDestroy(Sender: TObject); begin FWhatTimer.Free; // уничтожаем TWhatTimer end; procedure TForm1.OuterOnTimer(Sender: TObject); begin // внешний обработчик событий TWhatTimer LabeledEdit1.Text:=IntToStr(LabeledEdit1.Tag); LabeledEdit1.Tag:=LabeledEdit1.Tag-1; end; procedure TForm1.Button1Click(Sender: TObject); begin FWhatTimer.OnTimer:=OuterOnTimer; // назначаем внешний обработчик end; procedure TForm1.Button2Click(Sender: TObject); begin FWhatTimer.OnTimer:=nil; // восстанавливаем внутренний обработчик end; http://zalil.ru/32393085 внутренний обработчик таймера (по умолчанию) увеличивает значение, когда подключаем внешний обработчик (нажатием на кнопку 1) значение будет уменьшаться. кнопка 2 снова восстанавливает внутренний обработчик. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Fantomas_RUS (28.12.2011)
|
#8
|
||||
|
||||
![]() Цитата:
Код:
LabelTimer.T1 := TTimer.Create(...); LabelTimer.T1.onTimer:=TimeronTimer; // TimeronTimer должно быть методом, желательно главной формы, т.е. Form1.TimeronTimer. jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Fantomas_RUS (31.12.2011)
|
#9
|
||||
|
||||
![]() Поясните пожалуйста эту строчку, что она означает
Код:
property OnTimer: TNotifyEvent write SetOnTimer; |
#10
|
||||
|
||||
![]() это ж классика!)
она определяет public свойство OnTimer и указывает процедуру SetOnTimer, через которую "этому свойству присваивается значение". т.е. при присвоении свойству OnTimer какого-либо значения вызывается процедура SetOnTimer с этим значением в качестве параметра. тип свойства - метод. type TNotifyEvent = procedure (Sender: TObject) of object; Пишу программы за еду. __________________ |
#11
|
||||
|
||||
![]() Цитата:
Вообще стало лего давать свои процедуры на выполнение, при каком нибудь событии. Спасибо. |