Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Внизнепонятки с таймером Найти похожие ветки
← →
DinoRay (2005-11-08 11:38) [0]Есть класс в нем таймер, так вот при вызове 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;
← →
Ega23 © (2005-11-08 12:03) [1]сочетание
> Tmer:=TTimer.Create(Self);
и
i
> destructor TObj.Destroy;
> begin
> inherited;
> Timer.Free;
> end;
даст ошибку.
← →
Ega23 © (2005-11-08 12:04) [2]
> FlagTimer:=True;
Что такое Flagtimer?
← →
umbra © (2005-11-08 12:13) [3]у меня все работатет (если в деструкторе поменять местами строки между
begin
иend
. Проблема в том, как Вы используете компонент.
← →
Ega23 © (2005-11-08 12:15) [4]
> (если в деструкторе поменять местами строки между begin
> и end.
Их вообще не надо менять. Надо Timer.Free выбросить.
← →
umbra © (2005-11-08 12:20) [5]тогда лучше выбросить весь деструктор :)
← →
Leonid Troyanovsky © (2005-11-08 12:26) [6]
> umbra © (08.11.05 12:20) [5]
> тогда лучше выбросить весь деструктор :)
В данном случае, можно выбросить и TObj.
Тем более, что TTimer запускается без проблем.
Ну, а если серьезно, то проще наследовать TObj от TTimer.
--
Regards, LVT.
← →
Ega23 © (2005-11-08 12:34) [7]
> тогда лучше выбросить весь деструктор :)
>
Ну может у него кроме таймера там ещё что-то...
← →
DinoRay (2005-11-08 13:08) [8]Почитал я тут и самому смешно стало
тут признаюсь перепутал со спешки,
хотя ошибку не даст...)))
> destructor TObj.Destroy;
> begin
> inherited;
> Timer.Free;
> end;
> Timer.Free;
Это можно выбросить, но смысл от этого не изменится..
А вот TObj выбросить не получится т.к. процедура procedure TimerOnTimer(Sender:TObject); должна быть членом класса а у меня Dll
Я думаю дело в том, что WM_TlMER имеет низкий приоритет и может быть игнорировано, если система занятаю.
После Start у меня идет опрос порта, переставил в другое место, заработало.
← →
Ega23 © (2005-11-08 13:12) [9]
> хотя ошибку не даст...)))
Ещё как даст. Или замени Timer:=TTimer.Create(Self); на Timer:=TTimer.Create(nil);
>должна быть членом класса а у меня Dll
class procedure уже отменили???
← →
DinoRay (2005-11-08 13:18) [10]Сначала там было Timer:=TTimer.Create(nil);
откуда и взялось Timer.Free;
то, что после inherited поставил я сказал очепятка...
на срабатываение это все-равно не влияет
class procedure уже отменили???
Нет не отменили... только от перемены слагаемых сумма не меняется...
что так, что так один фиг
← →
Digitman © (2005-11-08 13:20) [11]
> процедура procedure TimerOnTimer(Sender:TObject); должна
> быть членом класса а у меня Dll
это называется "в огороде бузина, а в Киеве дядька"
← →
Ega23 © (2005-11-08 13:32) [12]
> что так, что так один фиг
По секрету: это два совсем разных фига.
← →
DinoRay (2005-11-08 13:36) [13]Ладно тема закрыта
10 сообщений и толку... спасибо за бесполезные советы
← →
Leonid Troyanovsky © (2005-11-08 13:49) [14]
> DinoRay (08.11.05 13:08) [8]
> А вот TObj выбросить не получится т.к. процедура procedure
> TimerOnTimer(Sender:TObject); должна быть членом класса
Хе-хе. procedure Timer; override.
> а у меня Dll
Тебе крупно не повезло.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.015 c