2010-01-20 3 views
1

dans mon application J'ai une forme principale avec un bouton. En cliquant sur ce bouton, un formulaire (non créé automatiquement en dpr) est créé et affiché; Sur ce formulaire, j'ai placé un composant TApplicationEvents et j'ai défini son gestionnaire d'événements OnIdle. Ce gestionnaire d'événements n'est pas appelé! Cela peut-il dépendre parce que j'ai dérivé cette deuxième forme non de TForm mais d'une autre classe, TChartBasicForm (au moyen de VFI)? Merci beaucoup pour vos réponses. Massimo.Pourquoi TApplicationEvents.OnIdle n'est-il pas appelé?

+8

« Il ne fonctionne pas » est probablement le moins utile phrase dans l'histoire de débogage. Voulez-vous dire que ce n'est pas appelé du tout? Pouvez-vous vérifier cela en plaçant un point d'arrêt dans le gestionnaire d'événements et en observant qu'il ne se casse jamais? Ou voulez-vous dire qu'il fait quelque chose mais pas ce que vous attendiez? –

+1

J'ai écrit une application de test rapide, avec VFI mais pas de TChartBasicForm et tout fonctionne comme prévu. Pouvez-vous fournir plus d'informations? –

+0

Voté pour fermer car il ne semble plus pertinent selon la propre réponse de Massimo. – jpfollenius

Répondre

1

Accrocher l'événement inactif d'une application peut entraîner de nombreux problèmes de débogage et d'autres problèmes de maintenance, en particulier sur un formulaire autre que le formulaire principal. Je me rends compte que ceci peut ne pas répondre à votre question spécifique (ce qui est difficile à faire à ce stade étant donné le flou), mais êtes-vous sûr de ne pas pouvoir accomplir ce que vous essayez de faire avec TTimer ou TThread?

1

Merci à tous pour votre intérêt. "Cela ne fonctionne pas" signifie qu'il n'est pas appelé du tout. Au lieu de cela, l'événement OnShowHint fonctionne!

Ooops! Peut-être que j'ai compris le mauvais comportement! Dans la principale forme que je défini une procédure comme celle-ci:

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

et dans le FormCreate:

Application.OnIdle := IdleHandler; 

Cela inhibe probablement TApplicationEvents.OnIdle, même si dans IdleHandler, à la fin de la procédure, je mets:

Application.OnIdle := nil; 

parce que le code est utile d'essayer une connexion seulement au début de l'application lication.

Je vous demande pardon: mon visage est rouge ......

+3

La raison pour laquelle vos actions ont provoqué l'échec de TApplicationEvents est que TApplicationEvents fonctionne en affectant * ses propres méthodes * aux événements de TApplication. Lorsque vous affectez votre méthode directement à l'événement TApplication, vous avez rompu le lien entre elle et l'objet TApplicationEvents. C'est malheureux, mais c'est comme ça que ça fonctionne. –

Questions connexes