Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.025 c
2-1131805105
Olga_b
2005-11-12 17:18
2005.11.27
ПРОПИСНЫЕ БУКВЫ!


2-1131781771
lRunner
2005-11-12 10:49
2005.11.27
Как исправить крокозябры в Caption?


2-1131836955
Brad
2005-11-13 02:09
2005.11.27
Когда показывать скроллбар.


6-1123937295
0n!k
2005-08-13 16:48
2005.11.27
Как направить clientsocket через прокси?


14-1130612804
tesseract
2005-10-29 23:06
2005.11.27
Выбор клавы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский