Вниз
Скачать: CL | DM;

Привязка сообщений   Найти похожие ветки 

 
Hyboid ©   (2004-04-12 13:56) [0]

Подскажите пожалуйста механизм привязки сообщений к объекту.
Правильно ли выполняется динамическое создание таймера ?

Procedure MyOnTimer(Sender : TObject);
begin
 ...
end;

var MyTimer : TTimer;

...
 MyTimer := TTimer.Create(nil);
 MyTimer.OnTimer := MyOnTimer;

...


 
Anatoly Podgoretsky ©   (2004-04-12 14:00) [1]

Создание правильное, а вот назначения обработчика неправильное, обработчик должет быть типа TNotifyEvent


 
serge35   (2004-04-12 14:00) [2]

А таймер обязательно создавать динамически?


 
Hyboid ©   (2004-04-12 14:04) [3]

Таймер приведен лишь в качестве примера. Необходимо создавать некоторый объект, который бы реагировал на события.


 
serge35   (2004-04-12 14:10) [4]

По таймеру?


 
Hyboid ©   (2004-04-12 14:16) [5]

На те события, на которые этот объект вообще может отвечать.
Как объявить обработчик типа TNotifyEvent ?


 
serge35   (2004-04-12 14:19) [6]

Если ты решил создать некий объект и хочешь по нему задать некий вопрос, то получишь некий ответ.


 
Anatoly Podgoretsky ©   (2004-04-12 14:22) [7]

Hyboid ©   (12.04.04 14:16) [5]
Метод какого либо класса


 
Hyboid ©   (2004-04-12 14:26) [8]

В принципе, конечно, можно и конкретизировать. Например, как динамически создать кнопку и повесить обработчик на ее нажатие. Но разве привязка обработчиков выполняется не единым образов для всех объектов?


 
Hyboid ©   (2004-04-12 14:29) [9]

Anatoly Podgoretsky.
Т.е. в случае с таймером я должен написать:

type
 TMyTimer = class(TTimer)
   ...
   Procedure OnTimer(Sender : TObject);
 end;

Procedure TMyTimer.OnTimer(Sender : TObject);
begin
 ...
end;



 
Anatoly Podgoretsky ©   (2004-04-12 14:30) [10]

Единым!

СвойствоEvent := Обработчик соответствующего типа;


 
serge35   (2004-04-12 14:30) [11]

У кнопки есть несколько событий, кроме нажатия.
А у TEdit такого события нет и т.д.


 
Anatoly Podgoretsky ©   (2004-04-12 14:33) [12]

Hyboid ©   (12.04.04 14:29) [9]
Да подходит, только желательно ограничить обработчик, поместить его описание в секцию private

MyTimer := TMyTimer.Create(nil);
MyTimer.OnTimer := OnTimer;

Некрасиво давать одинаковые имена свойству и методу, будут серьезные проблемы.


 
Hyboid ©   (2004-04-12 14:53) [13]

Короче получилось вот что:

type
 TMyTimer = class(TTimer)
   Procedure MyOnTimer(Sender : TObject);
 end;

var t    : TMyTimer;

Procedure TMyTimer.MyOnTimer( Sender : TObject );
begin
 ...
end;

...
 t := TMyTimer.Create(nil);
 t.Interval := 500;
 t.onTimer := t.MyOnTimer;
...



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

Скачать: CL | DM;



Память: 0.48 MB
Время: -0.97 c
7-1079007671
Vasek
2004-03-11 15:21
2004.05.02
Регистрация типа файлов в системе и их запуск


3-1081222420
V-A-V
2004-04-06 07:33
2004.05.02
Пароль на базу Access


14-1081789585
тихий вовочка
2004-04-12 21:06
2004.05.02
Свой логгер


1-1081934434
Juliet
2004-04-14 13:20
2004.05.02
Отловить событие максимизации/восстановления формы


1-1082202234
Mishenka
2004-04-17 15:43
2004.05.02
Не выводится TPrintDialog.




   Наверх