IMESSAGEFILTER : ÉVÉNEMENTS MOUSEMOVE / MOUSEENTER / MOUSELEAVE AU NIVEAU D'UN C
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
7 janv. 2006 à 02:48
Hurin
Messages postés8Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention25 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.
Hurin
Messages postés8Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention25 mars 2009 7 juin 2009 à 11:26
OK, je teste ça de suite, merci coq,
Bonne journée !
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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és8Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention25 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és8Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention25 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és2Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 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és2Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 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)) )
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és6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 22 mars 2008 à 19:23
Comment ça à 50% ?
nowox
Messages postés1Date d'inscriptionjeudi 16 novembre 2006StatutMembreDernière intervention18 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és6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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és1Date d'inscriptiondimanche 24 avril 2005StatutMembreDernière intervention15 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és149Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention30 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és475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 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és5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 7 janv. 2006 à 02:48
7 juin 2009 à 11:26
Bonne journée !
7 juin 2009 à 10:33
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, ...
7 juin 2009 à 10:28
Merci !
7 juin 2009 à 10:18
27 févr. 2009 à 17:30
if ( ctrl !null && (ctrl this._container || this.Contain(_container, ctrl)) )
correction
if ( ctrl != null && this.Contain(_container, ctrl) )
Mais vous l'auriez vu ;)
27 févr. 2009 à 17:24
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
devient :
et la petite méthode récursive qui va bien :
22 mars 2008 à 19:23
18 mars 2008 à 20:16
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%...
16 mai 2007 à 21:47
15 mai 2007 à 08:42
22 janv. 2006 à 18:17
8 janv. 2006 à 19:19
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 ;)
7 janv. 2006 à 02:48