2010-01-20 5 views
1

в моем приложении У меня есть основная форма с кнопкой. Нажав на эту кнопку, создается и отображается форма (не созданная автоматически в dpr); в этой форме я поместил компонент TApplicationEvents, и я определил его обработчик события OnIdle. Этот обработчик событий не вызван! Может ли это зависеть от того, что я вывел эту вторую форму не из TForm, а из другого класса, TChartBasicForm (с помощью VFI)? Большое спасибо за ответы. Массимо.Почему вызов TApplicationEvents.OnIdle не вызван?

+8

«Это не работает», вероятно, наименее полезная фраза в истории отладки. Вы имеете в виду, что это вообще не называется? Можете ли вы проверить, что, поставив точку останова в обработчике событий и заметив, что он никогда не прерывается? Или вы имеете в виду, что это что-то делает, а не то, что вы ожидали от этого? –

+1

Я написал приложение для быстрого тестирования с VFI, но не от TChartBasicForm, и все работает так, как ожидалось. Можете ли вы предоставить дополнительную информацию? –

+0

Проголосовало за закрытие, так как кажется, что больше не актуально в соответствии с собственным ответом Массимо. – jpfollenius

ответ

1

Приобретение незанятого события приложения может привести к множеству проблем с отладкой и другим головным болям обслуживания, особенно в форме, отличной от основной. Я понимаю, что это не может ответить на ваш конкретный вопрос (что трудно сделать в этот момент с учетом неопределенности), но уверены ли вы, что не можете выполнить то, что вы пытаетесь сделать с помощью TTimer или TThread?

1

Спасибо за внимание всем людям. «Это не работает» означает, что он вообще не называется. Вместо этого работает OnShowHint!

Ooops! Возможно, я понял плохое поведение! В основной форме я определил процедуру как этот:

procedure IdleHandler(Sender: TObject; var Done: Boolean); 

и в FormCreate:

Application.OnIdle := IdleHandler; 

Это, вероятно, ингибирует TApplicationEvents.OnIdle, даже если в IdleHandler, в конце процедура, я ставлю:

Application.OnIdle := nil; 

потому что код полезно попробовать соединение только в Бегин из приложения заревой.

Прошу прощения: мое лицо красное ......

+3

Причина, по которой ваши действия вызвали отказ TApplicationEvents, заключалась в том, что TApplicationEvents работает, назначая * свои собственные * методы событиям TApplication. Когда вы назначаете свой метод непосредственно событию TApplication, вы нарушили связь между ним и объектом TApplicationEvents. Это печально, но так оно и работает. –

Смежные вопросы