IMESSAGEFILTER : ÉVÉNEMENTS MOUSEMOVE / MOUSEENTER / MOUSELEAVE AU NIVEAU D'UN C

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 7 janv. 2006 à 02:48
Hurin Messages postés 8 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 25 mars 2009 - 7 juin 2009 à 11:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35443-imessagefilter-evenements-mousemove-mouseenter-mouseleave-au-niveau-d-un-controle-sans-tenir-compte-des-controles-enfants

Hurin Messages postés 8 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 25 mars 2009
7 juin 2009 à 11:26
OK, je teste ça de suite, merci coq,
Bonne journée !
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 juin 2009 à 10:33
Salut,

En fait c'est plutôt des couples :
- Bouton gauche : WM_LBUTTONDOWN et WM_LBUTTONUP
- Bouton droit : WM_RBUTTONDOWN et WM_RBUTTONUP
- ...

Voir aussi WM_LBUTTONDBLCLK, WM_RBUTTONDBLCLK, ...
Hurin Messages postés 8 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 25 mars 2009
7 juin 2009 à 10:28
Heu, je cherche également comment faire pour catcher un event sur MouseClick, et là, je ne trouve pas le message windows équivalent, si quelqu'un le connaissait, ça m'arrangerait :)
Merci !
Hurin Messages postés 8 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 25 mars 2009
7 juin 2009 à 10:18
Je suis en train de le tester, et ça a l'air d'être exactement ce que je cherchais, merci beaucoup coq (et merci également à Fredibulle dont l'astuce est également utile) !
Fredibulle Messages postés 2 Date d'inscription vendredi 27 février 2009 Statut Membre Dernière intervention 27 février 2009
27 févr. 2009 à 17:30
Oups, petite erreur et désolé pour les BBCode en trop sur ce premier post
if ( ctrl !null && (ctrl this._container || this.Contain(_container, ctrl)) )

correction

if ( ctrl != null && this.Contain(_container, ctrl) )

Mais vous l'auriez vu ;)
Fredibulle Messages postés 2 Date d'inscription vendredi 27 février 2009 Statut Membre Dernière intervention 27 février 2009
27 févr. 2009 à 17:24
Ajout de cette ligne dans le constructeur, sinon ça ne fonctionne pas :
Application.AddMessageFilter(this);

Me suis permis d'améliorer un peu le code puisqu'il fonctionne uniquement sur une imbrication de premier niveau, nous pourrions très bien imaginer avoir plusieurs panel superposés les uns au dessus des autres avec des labels, etc...

donc cette ligne
if ( ctrl !null && (ctrl this._container || this._container.Contains(ctrl)) )

devient :
if ( ctrl !null && (ctrl this._container || this.Contain(_container, ctrl)) )

et la petite méthode récursive qui va bien :
protected bool Contain(Control parent, Control ctrl)
{
if (parent == ctrl)
{
return true;
}
foreach ( Control control in parent.Controls )
{
if ( this.Contain(control, ctrl) )
{
return true;
}
}
return false;
}
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
22 mars 2008 à 19:23
Comment ça à 50% ?
nowox Messages postés 1 Date d'inscription jeudi 16 novembre 2006 Statut Membre Dernière intervention 18 mars 2008
18 mars 2008 à 20:16
La source est excellente merci. Ca illustre clairement comment utiliser IMessageFilter, ce que j'ignorais jusqu'ici.

J'ai cependant un petit soucis. Si j'ai effectivement besoin de capturer les évènements OnMouseMove, OnMouseLeave et OnMouseEnter, j'ai également besoin de capturer OnMouseDown et OnMouseUp. J'ai tenter de modifier le code mais je ne suis pas convaincu par ma modification qui ne semble fonctionner qu'à 50%...
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 mai 2007 à 21:47
Oui, si le message destiné à l'ActiveX visuel ne transite pas par l'application, on ne peut pas faire l'interception.
philippe1796 Messages postés 1 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 15 mai 2007
15 mai 2007 à 08:42
Cela correspond bien à un besoin mais il semble que cela ne fonctionne pas avec un ActiveX visuel sur le panel.
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
22 janv. 2006 à 18:17
Merci beaucoup pour cette source, je vais aussi étudier ça de plus près.
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
8 janv. 2006 à 19:19
super
j'avais super besoin de faire ca à un moment donné pour un de mes contrôles.
la solution que j'avais adopté est que les controles filles passent la position du curseur aux controles parents. J'ai aussi penser aux hooks mais c'est vraiment pas une bonne idée.
en tout cas, bravo
je vais me lancer dans l'analyse du code source ;)
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 janv. 2006 à 02:48
Excellent, encore merci :-)
Rejoignez-nous