powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / не работает Timer->OnTimer
12 сообщений из 12, страница 1 из 1
не работает Timer->OnTimer
    #33384854
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот такой класс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
typedef void __fastcall (__closure *TTrackEvent)(System::TObject* Sender);
class PACKAGE TTrack : public TComponent
{
private:
    TTimer *Timer;
    TTrackEvent FOnTimer;
    bool FActive;
    unsigned int FInterval;
    void __fastcall SetActive(bool active);
    void __fastcall SetInterval(unsigned int interval);

public:
    __fastcall TTrack(TComponent* Owner);
    virtual __fastcall ~TTrack();

__published:
    __property TTrackEvent OnTimer={read=FOnTimer, write=FOnTimer};
    __property bool Active={read=FActive, write=SetActive};
    __property unsigned int Interval = {read=FInterval, write=SetInterval};

};

вот конструктор

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
__fastcall TTrack::TTrack(TComponent* Owner)
    : TComponent(Owner)
{
 Timer = new TTimer(this);
 Timer->Name = "__Timer";
 Timer->Enabled = false;
 FInterval =  1000 ;
 FActive = false;
 Timer->OnTimer = FOnTimer;
 Timer->Interval = FInterval;
}

почему при срабатывании таймера не вызывается метод FOnTimer?
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384884
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпочему при срабатывании таймера не вызывается метод FOnTimer?
А кто сказал, что он срабатывает?
P.S.
Код: plaintext
 Timer->Enabled = false;
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384888
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорри, забыл показать
Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TTrack::SetActive(bool active)
{
 FActive = active;
 Timer->Enabled = active;
}
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384918
homichus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а сам FOnTimer где?
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384925
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
homichusа сам FOnTimer где?

typedef void __fastcall (__closure *TTrackEvent)(System::TObject* Sender);

TTrackEvent FOnTimer;

Или я что-то делаю не правильно?
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384958
homichus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед Макар homichusа сам FOnTimer где?

typedef void __fastcall (__closure *TTrackEvent)(System::TObject* Sender);

TTrackEvent FOnTimer;

Или я что-то делаю не правильно?

это определение типа.
а долждно быть что-то типа
Timer->OnTimer = proc;
где

proc это
void proc(TObject *Sender)
{
...
}
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384971
homichus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рантайм присваивание обработчика события:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
    Timer1->OnTimer = Timer1Timer;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    ShowMessage("ddd");
}

...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384973
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
homichus
это определение типа.
а долждно быть что-то типа
Timer->OnTimer = proc;
где

proc это
void proc(TObject *Sender)
{
...
}

Я хотел сделать событие OnTimer для класса TTrack в инспекторе объектов которое срабатывало бы по событию таймера. Вот. Как это реализовать?
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33384979
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
homichusрантайм присваивание обработчика события:
...


Да. Так у меня работает, а вот из компонента нет.
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33385012
homichus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ответ не знаю.
могу предположить, что возможно вначале вызывается конструктор, а только потом присваивается значение TTrack::FOnTimer.
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33385026
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошел бы отладчиком и посморел, присваивается ли обработчик, ставится ли Enabled=1;
Вызывается ли обработчик
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
не работает Timer->OnTimer
    #33385119
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже работает. Вот в таком виде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
__fastcall TTrack::TTrack(TComponent* Owner)
    : TComponent(Owner)
{
 FOnTimer = NULL;
 Timer = new TTimer(this);
 Timer->Name = "__Timer";
 Timer->Enabled = false;
 FInterval =  1000 ;
 FActive = false;
 Timer->OnTimer = runTimer;
 Timer->Interval = FInterval;
}
.....
Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TTrack::runTimer(TObject *Sender)
{
 if (FOnTimer != NULL)
    FOnTimer(Sender);
}

Всем спасибо
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / не работает Timer->OnTimer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]