Répartition des messages
Remonter à Compréhension du système de gestion des messages
Lorsqu'une application crée une fenêtre, elle recense une procédure fenêtre avec le modèle Windows. La procédure fenêtre représente la routine qui gère les messages pour la fenêtre. Habituellement, la procédure fenêtre contient une instruction longue case avec des entrées pour chaque message devant être géré par la fenêtre. N'oubliez pas que "fenêtre" dans ce sens signifie seulement quelque chose sur l'écran : chaque fenêtre, chaque contrôle, etc. A chaque fois que vous créez un nouveau type de fenêtre, vous devez créer une procédure fenêtre complète.
La VCL simplifie la répartition des messages de plusieurs manières :
- Chaque composant hérite d'un système complet de répartition de message.
- Le système de répartition de message dispose d'une gestion par défaut. Vous ne définissez de gestionnaire que pour les messages auxquels vous souhaitez spécifiquement répondre.
- Vous pouvez modifier des parties de la gestion de message en vous appuyant sur les méthodes reçues en héritage pour la majeure partie du traitement.
Le bénéfice le plus évident de cette répartition de message est le suivant : à tout moment, vous pouvez envoyer n'importe quel message à n'importe quel composant. Si le composant n'a pas de gestionnaire défini pour ce message, le système de gestion par défaut s'en charge, généralement en ignorant le message.
Suivi du flux des messages
La méthode MainWndProc est recensée par la VCL comme procédure de fenêtre pour tous les types de composants d'une application. MainWndProc contient un bloc de gestion des exceptions qui transmet la structure du message en provenance de Windows à la méthode virtuelle WndProc, gérant les exceptions éventuelles à l'aide de la méthode HandleException de la classe application.
MainWndProc est une méthode non virtuelle qui n'effectue aucune gestion particulière des messages. Cette gestion a lieu dans WndProc, chaque type de composant ayant la possibilité de redéfinir cette méthode pour répondre à ses besoins spécifiques.
Les méthodes WndProc vérifient les conditions spéciales qui peuvent affecter le traitement et "interceptent", s'il le faut, les messages non souhaités. Par exemple, lorsque vous faites glisser un composant, celui-ci ignore les événements du clavier, et la méthode WndProc de TWinControl ne transmet ces événements que si l'utilisateur ne fait pas glisser le composant. Enfin, WndProc appelle Dispatch, une méthode non virtuelle héritée de TObject, qui détermine la méthode à appeler pour gérer le message.
Dispatch utilise le champ Msg de l'enregistrement du message pour déterminer comment répartir le message particulier. Si le composant définit un gestionnaire pour ce message, Dispatch appelle cette méthode. Si aucun gestionnaire n'est défini, Dispatch appelle DefaultHandler.