Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GEREZ LES EVENEMENTS MOUSE_WHEEL, MOUSE_ENTER, DBL_CLICK, MOUSE_LEAVE .... ETC POUR TOUS VOS CONTROLES EN 2 LIGNES DE CODE


Information sur la source



Description

Cliquez pour voir la capture en taille normale
Salut, voilà une source qui pourra être assez utile : il s'agit d'un usercontrol qui permet d'ajouter les évênements :


KeyDown(KeyCode As Long, Param As Long)
KeyUp(KeyCode As Long, Param As Long)
MouseHover()
MouseMove()
MouseLeave()
MouseWheel(ByVal Sens As WHEEL_SENS)
MouseDown(Button As MouseButtonConstants)
MouseUp(Button As MouseButtonConstants)
MouseDblClick(Button As MouseButtonConstants)


à tous vos contrôles, y compris vos propres usercontrol. La seule condition est de posséder la propriété hWnd.


Gestion des 3 boutons de la souris et de toutes les touches du clavier.



Avec ce code source, vous pourrez donc :
-gérer la molette (par exemple dans une scrollbar)
-gérer le click de la molette, le double click droit...etc
-gérer l'éntrée et la sortie de la souris dans vos controles



Evidemment, tout çà SANS COMNSOMMER DE RESSOURCES EN PLUS puisqu'il s'agit de subclassing ;)
Donc aucun timer pour la gestion de l'entrée/sortie de la souris sur un controle.


Merci à EB pour le bout de code ASM dans l'usercontrol qui simplifie l'appel à la wndproc de substitution (car AddressOf dispo que pour des fonctions publiques de module *.bas).
 

Source

  • 'Utilisation : ajouter mon UserControl (nommé KME1 dans cet exemple) et faire ce code dans le form_load :
  • 'associons KME1 à la scrollbar verticale
  • With KME1
  • 'récupère le handle du controle dont on veut faire le subclassing
  • .ControlHwnd = VScroll1.hWnd
  • 'lance la procédure de subclassing
  • Call .LaunchKeyMouseEvents
  • End With
  • Nécessite UN KeyMouseEvents par controle.
'Utilisation : ajouter mon UserControl (nommé KME1 dans cet exemple) et faire ce code dans le form_load :

 'associons KME1 à la scrollbar verticale
    With KME1
    
        'récupère le handle du controle dont on veut faire le subclassing
        .ControlHwnd = VScroll1.hWnd
        
        'lance la procédure de subclassing
        Call .LaunchKeyMouseEvents
        
    End With




Nécessite UN KeyMouseEvents par controle.

Conclusion

Cette fois c'est du niveau 3 ! Na !

Commentez et notez svp ;)

@+
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de violent_ken le 17/04/2007 22:55:49

J'ai oublié de préciser :

-pour utiliser l'OCX dans vos projets, il faudra le compiler et ajouter une référence à cet OCX

-pour démarrer mon exemple, il faut lancer LE FICHIER *.VBG

@+ et enjoy

signaler à un administrateur
Commentaire de violent_ken le 17/04/2007 23:04:08

Autre chose : comme j'ai codée çà à l'arrache en 2 heures ce soir, j'ai pas mis beaucoup de commentaires et il se peut que j'ai fait quelques petites bourdes ^^


@+

signaler à un administrateur
Commentaire de violent_ken le 17/04/2007 23:33:46

Encore autre chose pendant que j'y pense.... MERCI à MadM@tt pour sa source PictureBox améliorée, c'est grâce à elle que j'ai pu implanter l'ASM d'EBArtSoft ^^

@+

signaler à un administrateur
Commentaire de MadM@tt le 17/04/2007 23:57:36

Ah le voilà l'ocx dont tu parlais ;)
Vraiment interessant, le coup du "2 lignes pour l'utiliser" ça a l'air vraiment tentant.
Par contre je suppose qu'il y'a toujours hélas le problème de l'ide qui plante à tout va, pas pratique si on veut développer, enfin c'est pas une critique j'ai le meme problème lol ^^
Renfield avait proposé de passer par une dll externe pour le subclassing (ce que je n'ai pas encore eu le temps et le courage de faire :s) pour résoudre ce souci.
Bravo et encore "big up" pour EBArtSoft qui passera surement par là mdr
Allé bonne nuit ;)

signaler à un administrateur
Commentaire de violent_ken le 18/04/2007 00:02:36

Pour le coup de l'IDE qui crashe, je sais pas si çà le fait en utilisant le fichier *.ocx en externe (dans l'exemple pas d'ocx, mais le fichier ctl chargé dans le projet). A tester ;)


Et effectivement, la dll de Renfield passe outre ce problème et propose bien plus de possibilités, mais c'est pas le même niveau non plus ;)


Et c'est vrai, "big up" à EB et merci également à toi pour ta source, çà m'a été vraiment utile pour implanter l'appel et la wndproc.

Bonne nuit, @+

signaler à un administrateur
Commentaire de MadM@tt le 18/04/2007 00:08:46

Ahhh effectivement en ocx externe je ne sais pas ce que ça donne, à tester.

signaler à un administrateur
Commentaire de Renfield le 18/04/2007 06:03:57 administrateur CS

R.A.S.

beau boulot

signaler à un administrateur
Commentaire de EBArtSoft le 18/04/2007 08:39:27 administrateur CS

Ahahaha le subclassing ne consomme pas de ressource ? mais t'as vu ça ou ? Bien au contraire c'est une surcouche de la fonction WindowProc donc forcement c'est bcp plus lent ! Mais bon c'est sur qu'a l'echelle d'un bon usrecontrol bien lourd c'est deja pas mal rapide. Je me comprend :p

MadM@tt> si tu utilise l'ocs dans t'es projet alors ça ne plante pas. Par contre si tu inclu le control dans ton projet alors la oui ça peut planter. Car en realite il faut que la procedure de sous classement soit TOUJOURS disponible a l'execution.

Trop_Violent_Ken> C'est cool mais j'aurais bien vu un module de classe car le usercontrol est vraiment lourd que ce soit a l'initialisation mais aussi lors de l'acces aux proprietés. Et puis j'aurais crée une interface avec les evenements a ajouter c'est quand meme mieu :p

Hey les mecs arretez d'ecrire mon pseudo partout je vais me faire reperer par le googlebot hahaha

signaler à un administrateur
Commentaire de EBArtSoft le 18/04/2007 08:49:39 administrateur CS

Bon je rajouterais pour bien faire (enfin pour faire a ma façon on va dire ça comme ça :p) je mettrais les def du module dans l'usercontrol (on ce debarrase du module) on ajoute les mousex mousey dans tout les evenements et surtout on fait une interface car les raiseevents c'est pas tip top.

Petit detail ausssi tu fais :

'appel de la routine standard pour les autres messages
WindowProc = CallWindowProc(OldProc, hWnd, uMsg, wParam, lParam)

Mais en realite cette fonction est TOUJOURS appelée donc reste a voir si tu veux changer la valeur de retour de la fonction.

@+

signaler à un administrateur
Commentaire de MadM@tt le 18/04/2007 15:56:37

La WindowProc d'un objet sous classé est toujours appelée ? (ou alors j'ai mal compris)
Mais pourquoi (tant de haine) ? c'est quand meme le principe du sous classement d'intercepter les messages et de choisir de les faire suivre ou pas au controle sous classé non ?

signaler à un administrateur
Commentaire de EBArtSoft le 18/04/2007 17:08:33 administrateur CS

MadM@tt> Jettes un oeuil sur le "select case" tu vas comprendre !

signaler à un administrateur
Commentaire de MadM@tt le 18/04/2007 18:28:16

Ahhh autant pour moi ^^, j'ai pas regardé le passage concerné.

signaler à un administrateur
Commentaire de violent_ken le 18/04/2007 19:29:09

Renfield ==> Merci ;)

EB ==> oui bien sur, çà consomme des ressources, mais c'est négligeable (il me semble) comparé à un timer ^^... parce que généralement, les usercontrol gérant le MOUSE_LEAVE en utilisent un ;)
Pour le module de classe, pourquoi pas oui, et pour l'interface j'ai tout ce qu'il faut pour le faire (thx Renfield^^) mais faut déjà que je le fasse sur une autre de mes sources ! Enfin je ferai peut être une MAJ.

Le choix de l'usercontrol est principalement motivé pour la facilité d'utilisation. Pour l'user novice, on pose la "souris" (super bitmap de mon ocx...-__-) sur la form et puis c'est bon. Mais certes c'est gourmand, plus qu'une classe.



Pour le module, en fait hier je voulais faire complètement autre chose et j'ai eu l'idée de cette source ^^ Donc je l'ai gardé (d'ailleurs il se nomme mdlProcs je viens de voir, il était destiné à la WindowProc à l'origine).

MouseX et MouseY, lol oui, je vais le faire, mais j'ai bouclé çà à l'arrache hier (pas eu le temps de décortiquer le lParam^^).

"Petit detail ausssi tu fais :...." ==> euh, ERF ;) je corrige ;)



Mais juste une question : pourquoi as tu peur des googlebots ????
^^

@+

signaler à un administrateur
Commentaire de EBArtSoft le 18/04/2007 19:47:04 administrateur CS

Quelle efficacité ! Il ira loin notre ultra_violent_ken... enfin il ira au moins jusqu'a Balrog apres faut voir :p

Tu connais pas la legende du googlebot mangeur de bande passante ?
je vous la raconterait un soir de pleine lune :p

B@nne prog

signaler à un administrateur
Commentaire de violent_ken le 18/04/2007 19:49:47

mdr ;)

@+ ^^

signaler à un administrateur
Commentaire de moustachu le 20/04/2007 19:44:58

Bonjour,

Jolie source.. L'intérêt du subclassing ici est surtout pour mousewheel, car le MouseLeave se gère très bien sans.(et sans timer ;o))

++
Moustachu

signaler à un administrateur
Commentaire de violent_ken le 20/04/2007 19:52:19

Salut, en fait tout les events peuvent être utile (si le composant ne les possède pas, notamment les click mouse_middle et double_click non gauche).


Mais dis moi, comment gère t-on le MouseLeave sans subclassing et sans Timer ??

@+

signaler à un administrateur
Commentaire de JLN le 23/04/2007 17:37:58

Bon boulot, et surtout merci de faire partager... Et dire que tous ces commentaires contribus à faire avancer le shimili... chilmi... schmilbili... enfin ce truc quoi !

@+ JLN

signaler à un administrateur
Commentaire de violent_ken le 24/04/2007 15:18:37

Merci pour le commentaire !

@+

signaler à un administrateur
Commentaire de violent_ken le 17/05/2007 17:23:05

Hop, je poste toute ma série de contrôles stylés XP avec ce UserControl inclus (débugé et gestion de nouveaux paramètres comme Shift...) :
http://www.vbfrance.com/code.aspx?ID=42726

@+

signaler à un administrateur
Commentaire de andalo le 12/06/2008 14:38:54

Ah ben bravo, je n'ai pas le niveau (ni le courage et le temps) pour tout piger à cette source, mais je me regale à scroller tout ce que je peux scroller, un bonheur!!
Cependant en debugage(j'ai mis un taquet sur un evenement mouse_wheel) ca m'a etteint le pc!!! Il ya quelque commentaire inqietant, sur la source j'espere ne pas faire planter les pc des personnes qui vont se servir de mon appli!!
Malgré les craintes si je pouvais mettre un note j'hesiterai entre un 12 ou un 13 sur 10

signaler à un administrateur
Commentaire de Renfield le 12/06/2008 14:44:49 administrateur CS

pas de danger avec le subclassing en mode compilé.
dangereux en mode IDE si on lui enlève la procédure de gestion de messages (Pause de l'IDE, par exemple)

des solutions de replis existent, subclasser via une dll, ou en injectant un peu d'ASM:
http://www.vbfrance.com/codes/MODULE-SUBCLASSER_38442.aspx


signaler à un administrateur
Commentaire de andalo le 12/06/2008 16:34:40 10/10

hey mais je peux noter!
Je sais que je suis exigeant mais l'evenement keydown est il fonctionel ou c'est moi qui ne sait pas l'activer?

signaler à un administrateur
Commentaire de andalo le 12/06/2008 16:47:14

Désolé ca fonctionee bien egalement, mon souci provient du fait que je veux savoir si l'utilisateur appui sur les fleches gauches, droite, haut, ou bas et que mon controle perd le focus du coup.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Gérer le MOUSE_WHEEL .... help ! [ par violent_ken ] Violent Ken Bonjour à toutes et à tous. J'aimerais faire quelque chose se très simple : gérer l'évênement MouseWheel dans un USERCONTROL.<br / Pb evenements UserControl [ par renocmoa ] Bonjour,j'ai trouvé plusieur ComboBox avec l'option Autocomplet qui fonctionne sur un evenement KeyPress du controle utilisateursi je place ce control Graphics ou usercontrol ? [ par sirozz ] Bonjour à tous, je suis en train de faire une application ou je peux "linker" des picturebox grace à des petites flèches pour créer des hierarchies et Variables et fonctions publiques d'un usercontrol [ par MadM@tt ] Bonjour à tous,rahhhhhhh je vais m'exploser la cervelle !!!Bon alors voilà mon souci :J'ai des variables et fonctions Publiques déclarées dans un user UserControl et event Mouse [ par renocmoa ] Bonsoir,Je voudrais savoir comment obtenir que les evenements souris (leav, hover...) soit utilisable avec un user control. En effet, par exemple avec Propriétés d'un Control dans UserControl [ par renocmoa ] Bonjour,je suis en train de réaliser un usercontrol, dans lequel il y a d'autre control(user ou pas) et je voudrais pouvoir modifier les propriétés de Utilisation molette de la souris (appuyer + défiler) [ par jytest ] Bonne année.... Meilleurs voeux...A l'aide...J'ai une msflexgrid appelée "msgDossier"Je sais comment cliquer sur une ligne sélectionnée, comment doubl Utilisation de ImageList dans un UserControl [ par Djedj ] Bonjour!Je souhaiterais pouvoir utiliser un contrôle ImageList dans mon UserControl, à l'instar de TreeView, TabView, ListView, etc... de la librairie Usercontrol et les Messages WM_MOUSEHOVER et WM_MOUSELEAVE [ par Mew27 ] Salut, j'ai un activex qui sert de Label, dont je voudrais ajouter le MouseHover et MouseLeave, j'ai trouvé quelques sources comment sous-classer, mai simulation. problème facile !!! [ par oli91191 ] bonjour à tous,j'ai un probleme (surement pas grand chose) lorsque j'essaie de simuler le mouvement de la mollette de la souris (wheel scroll). j'util


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,749 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.