Interception des messages
Remonter à Modification de la gestion des messages
Dans certaines circonstances, vous pouvez souhaiter que certains messages soient ignorés par vos composants. Autrement dit, vous voulez empêcher le composant de répartir un message à son gestionnaire. Pour intercepter un message de cette façon, vous devez redéfinir la méthode virtuelle WndProc.
Pour les composants VCL, la méthode WndProc sélectionne les messages avant de les transmettre à la méthode Dispatch qui, à son tour, détermine la méthode qui gère le message. En redéfinissant WndProc, votre composant a la possibilité de filtrer certains messages avant qu'ils ne soient transmis. La redéfinition de WndProc pour un contrôle dérivé de TWinControl ressemble à ceci :
procedure TMyControl.WndProc(var Message: TMessage); begin { tests pour déterminer la poursuite du traitement } inherited WndProc(Message); end;
void __fastcall TMyControl::WndProc(TMessage& Message) { // tests pour déterminer la poursuite du traitement if(Message.Msg != WM_LBUTTONDOWN) }
Le composant TControl définit des plages entières de messages liés à la souris qu'il filtre lorsqu'un utilisateur fait glisser puis lâche un contrôle. Une méthode WndProc redéfinie peut agir par deux moyens :
- Elle peut filtrer des plages entières de messages au lieu de spécifier un gestionnaire pour chacun d'eux.
- Elle peut inhiber totalement la répartition des messages de façon à ce que les gestionnaires ne soient jamais appelés.