Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

Работа с таймером   Найти похожие ветки 

 
Bers01   (2004-01-26 11:23) [0]

Уважаемые Мастера!
Подскажите в чем проблема:
Создаю в RunTime компонент

procedure Create;
var Timer:TTimer;
begin
Timer:=TTimer.Create(nil);
Timer.Interval:=1000;
Timer.OnTimer:=MOnTimer;
Timer.Enabled:=True;
end;

procedure MOnTimer(Sender:TObject);
begin
...
end;


а таймер не запускается (события OnTimer не происходит) и как следствие не выполняется процедура MOnTimer.
Подскажите, кто знает, в чем дело?
С Уважением, Андрей.


 
Digitman   (2004-01-26 11:27) [1]

консоль ?


 
Bers01   (2004-01-26 11:34) [2]

что консоль?
всмысле приложение? Нет оконное. А это имеет значение?


 
TUser   (2004-01-26 11:46) [3]

В OnCreate писать не надо. Надо так
procedure OnT;
begin
form1.Memo1.Lines.Add("===")
end;

procedure TForm1.Button1Click(Sender: TObject);
var t:TTimer;
ne:TNotifyEvent;
begin
t:=TTimer.Create(Application);
@ne:=@OnT;
t.OnTimer:=ne;
t.Interval:=2000;
t.Enabled:=true;
end;


 
Zelius   (2004-01-26 11:48) [4]

А может таймер создается в другом потоке TThread?


 
alex_***   (2004-01-26 11:50) [5]

а зачем внешний метод нужен? использование Form1 - потенциальный источник ошибок. Проще обработчик в свой же класс и сунуть и не надо будет мудрить с собаками.


 
alex_***   (2004-01-26 11:55) [6]

кстати и в OnCreate работает. Дело у него в чем-то другом .

procedure TForm1.FormCreate(Sender: TObject);
begin
....
with TTimer.Create(Self) do
Begin
OnTimer := Self.OnTimer;
Interval := 1000;
Enabled := true;
end;


 
Digitman   (2004-01-26 12:00) [7]


> Bers01 (26.01.04 11:34) [2]
> А это имеет значение?


Имеет.

p.s.
В том виде, в котором ты привел, код даже скомпилирован быть не может. Надеюсь, на самом деле привел ты методы, а не обычные процедуры.


 
Bers01   (2004-01-26 12:01) [8]


> А может таймер создается в другом потоке TThread?

Нет повых потоков я не создаю все в одном.


> В OnCreate писать не надо.

А Create не onCreate Формы, а конструктор моего класса.
Попробовал Ваш вариант: результат тот-же что и был, только если процедуру procedure OnT; описывать отдельно, то при компиляции не ругается, а если внутри класса(что и нужно), то на строку @ne:=@OnT; говорит Variable recuired...
Может есть еще какие идеи?
С Уважением, Андрей.


 
Bers01   (2004-01-26 12:03) [9]


> Надеюсь, на самом деле привел ты методы, а не обычные процедуры.


Да разумеется это методы моего класса.


 
Digitman   (2004-01-26 12:05) [10]


> А Create не onCreate Формы, а конструктор моего класса.


это без разницы. лишь бы класс тот или иной фигурировал.

приведи фрагмент кода, где вызывается конструктор твоего объекта


 
alex_***   (2004-01-26 12:11) [11]

а ты отладчиком вообще проходил? Адрес обработчика верный записал в timer?


 
Bers01   (2004-01-26 12:15) [12]

Вот примерно так (сокращенный текст модуля):
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, QExtCtrls;

type
TMC = Class(TObject)
T:TTimer;
constructor Create;
Destructor Destroy; override;
procedure onT(Sender: TObject);
end;

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
MC:TMC;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

constructor TMC.Create;
begin
T:=TTimer.Create(nil);
T.OnTimer:=onT;
T.Interval:=1000;
T.Enabled:=true;
end;

Destructor TMC.Destroy;
begin
T.Enabled:=False;
T.Free;
inherited destroy;
end;

procedure TMC.onT(Sender:TObject);
begin
ShowMessage("***");
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MC:=TMC.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MC.Destroy;
end;

end.

С Уважением, Андрей.


 
Digitman   (2004-01-26 12:22) [13]

выбери для конструктора своего класса имя иное, нежели Create()
у тебя не отрабатывает твой конструктор, ибо вызывается метод-конструктор предка, а там никакими таймерами не пахнет


 
Анонимщик   (2004-01-26 12:23) [14]

а у меня этот код работает


 
Digitman   (2004-01-26 12:25) [15]

в догонку ..

в [11] тебе хороший намек, что делать, когда не понимаешь. что происходит : отладчик в руки - и вперед с песней !


 
Bers01   (2004-01-26 12:26) [16]

В том-то и дело что отрабатывает... это я в режиме отладки выяснил. И создается он, и интервал устанавливается, а запускаться нехочет...


 
Digitman   (2004-01-26 12:30) [17]


> Bers01 (26.01.04 12:26) [16]


если действительно вызывается ТВОЙ конструктор, ЭТОТ код просто обязан работать


 
alex_***   (2004-01-26 12:31) [18]

[13] - ну ты чего-то загнул про Inherited конструктор, по-моему.


 
Verg   (2004-01-26 12:31) [19]

QExtCtrls

Не тот TTimer создаешь.
Q убери.


 
Digitman   (2004-01-26 12:38) [20]

точно ... проглядел ... QExtCtrls зачем здесь ?


 
Bers01   (2004-01-26 12:42) [21]


>[19]
> Не тот TTimer создаешь.
> Q убери.


ТОЧНО!!! ЗАРАБОТАЛО!!!
Спасибо всем принимавшим участие :)))


 
Verg   (2004-01-26 12:51) [22]

Это кстати, к разговору о семьнадцатых строках - как важно паказать как можно более полный код для точного диагноза.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.026 c
1-16221
Babay
2004-01-26 07:49
2004.02.06
XPmanifest и Dll (большой ворос)


6-16552
Паша Т
2003-12-02 21:42
2004.02.06
IdFTP


1-16277
Elast
2004-01-25 22:50
2004.02.06
RichEdit


1-16430
snake2003
2004-01-22 12:43
2004.02.06
ComcoBox с изменением размера


1-16259
Kinderrr
2004-01-24 10:46
2004.02.06
variants





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский