![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
непонятки с таймером [D6, WinXP]
DinoRay © (2005-11-08 11:38:00)Есть класс в нем таймер, так вот при вызове Start
таймер не срабатывает.
если сделать в конструкторе Timer.Enabled:=True;
срабатывает, че за непонятки...
TObj = class(TComponent)
private
Timer:TTimer;
public
procedure TimerOnTimer(Sender:TObject);
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
procedure Start;
procedure Stop;
end;
procedure TObj.TimerOnTimer(Sender:TObject);
begin
FlagTimer:=True;
end;
procedure TObj.Start;
begin
Timer.Enabled:=True;
end;
procedure TObj.Stop;
begin
Timer.Enabled:=False;
end;
constructor TObj.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
Timer:=TTimer.Create(Self);
Timer.OnTimer:=TimerOnTimer;
Timer.Enabled:=False;
end;
destructor TObj.Destroy;
begin
inherited;
Timer.Free;
end;
Leonid Troyanovsky (2005-11-08 13:49:00) [1]
> DinoRay (08.11.05 13:08) [8]
> А вот TObj выбросить не получится т.к. процедура procedure
> TimerOnTimer(Sender:TObject); должна быть членом класса
Хе-хе. procedure Timer; override.
> а у меня Dll
Тебе крупно не повезло.
--
Regards, LVT.
DinoRay (2005-11-08 13:36:00) [2]Ладно тема закрыта
10 сообщений и толку... спасибо за бесполезные советы
Ega23 (2005-11-08 13:32:00) [3]
> что так, что так один фиг
По секрету: это два совсем разных фига.
Digitman (2005-11-08 13:20:00) [4]
> процедура procedure TimerOnTimer(Sender:TObject); должна
> быть членом класса а у меня Dll
это называется "в огороде бузина, а в Киеве дядька"
DinoRay (2005-11-08 13:18:00) [5]Сначала там было Timer:=TTimer.Create(nil);
откуда и взялось Timer.Free;
то, что после inherited поставил я сказал очепятка...
на срабатываение это все-равно не влияет
class procedure уже отменили???
Нет не отменили... только от перемены слагаемых сумма не меняется...
что так, что так один фиг
Ega23 (2005-11-08 13:12:00) [6]
> хотя ошибку не даст...)))
Ещё как даст. Или замени Timer:=TTimer.Create(Self); на Timer:=TTimer.Create(nil);
>должна быть членом класса а у меня Dll
class procedure уже отменили???
DinoRay (2005-11-08 13:08:00) [7]Почитал я тут и самому смешно стало
тут признаюсь перепутал со спешки,
хотя ошибку не даст...)))
> destructor TObj.Destroy;
> begin
> inherited;
> Timer.Free;
> end;
> Timer.Free;
Это можно выбросить, но смысл от этого не изменится..
А вот TObj выбросить не получится т.к. процедура procedure TimerOnTimer(Sender:TObject); должна быть членом класса а у меня Dll
Я думаю дело в том, что WM_TlMER имеет низкий приоритет и может быть игнорировано, если система занятаю.
После Start у меня идет опрос порта, переставил в другое место, заработало.
Ega23 (2005-11-08 12:34:00) [8]
> тогда лучше выбросить весь деструктор :)
>
Ну может у него кроме таймера там ещё что-то...
Leonid Troyanovsky (2005-11-08 12:26:00) [9]
> umbra © (08.11.05 12:20) [5]
> тогда лучше выбросить весь деструктор :)
В данном случае, можно выбросить и TObj.
Тем более, что TTimer запускается без проблем.
Ну, а если серьезно, то проще наследовать TObj от TTimer.
--
Regards, LVT.
umbra (2005-11-08 12:20:00) [10]тогда лучше выбросить весь деструктор :)
Ega23 (2005-11-08 12:15:00) [11]
> (если в деструкторе поменять местами строки между begin
> и end.
Их вообще не надо менять. Надо Timer.Free выбросить.
umbra (2005-11-08 12:13:00) [12]у меня все работатет (если в деструкторе поменять местами строки между
beginиend. Проблема в том, как Вы используете компонент.
Ega23 (2005-11-08 12:04:00) [13]
> FlagTimer:=True;
Что такое Flagtimer?
Ega23 (2005-11-08 12:03:00) [14]сочетание
> Tmer:=TTimer.Create(Self);
и
i
> destructor TObj.Destroy;
> begin
> inherited;
> Timer.Free;
> end;
даст ошибку.