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 !

ADDIN WHEEL VB : ACTIVE LA ROULETTE DANS VB


Information sur la source

Catégorie :Modules Classé sous : addin, roulette, wheel, defiler, scroll Niveau : Initié Date de création : 04/04/2006 Date de mise à jour : 06/04/2006 20:42:20 Vu / téléchargé: 9 422 / 1 414

Note :
9,8 / 10 - par 5 personnes
9,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (44)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bon alors je vous vois venir en disant que ça existe déjà.

Et bien oui, EBArtSoft et Metalcoder (pour SDI) en ont déjà fait un.

Ils sont d'ailleurs disponibles ici:
http://www.vbfrance.com/code.aspx?ID=21802
http://www.vbfrance.com/codes/UTILISER-ROULETTE-DANS-VB6-IDE-ADDIN-V2_27453.aspx

J'étais content de trouver enfin un moyen de faire fonctionner la roulette de ma souris dans VB!!!

Mais je suis dans un environnement de développement SDI donc je télécharge la version 2 (celle de Metalcoder) censée fonctionner avec ma configuration...

Et en fait, ça ne marche pas vraiment bien. J'arrive à faire défiler une fois sur cinq en enlevant et redonnant le focus à ma fenêtre. Bref, c'etait pas vraiment ça...

Je me suis donc attelé à la tâche car pouvoir profiter d'une telle fonction dans VB et voir que chez les autres ça marche et pas chez moi, et ben ça c'est pas cool...

Je ne mets évidemment pas ce code pour plagier les deux sources citées ci-dessus. Je vous propose juste quelque chose qui fonctionne. Libre à vous de choisir votre version.

Je précise quand même que ça fonctionne dans les deux environnements (SDI ou pas) et ça gère aussi le mode double fenêtre (voir capture). Une petite option sympa est que lorsque l'on appuie sur Ctrl gauche et que l'on défile, ça navigue de procédures en procédures.

Côté technique, ça installe un Hook bas niveau sur la molette de la souris (je l'ai traduit d'un code C++). Lors d'un wheel, on regarde si la fenêtre qui a le focus et une fenêtre de code VB. Si oui, en fonction de la position de la souris on défile la ScrollBar correspondante.

Pour le nombre de lignes à défiler et choisir d'activer ou pas cet AddIn, cliquez sur le menu Compléments puis Paramètrer la roulette. Ici vous choisissez de défiler de 1 à 20 lignes. Les changements prennent effet immédiatement.

Le projet se compose de l'AddIn et d'un projet normal. En fait l'AddIn se contente juste de lancer le prog externe qui gère la molette. J'ai fait ça car sinon, il y avait un temps de latence à la fermeture des fenêtres. Ainsi le hook est géré dans un processus à part. Déjà ça évite à VB de planter en même temps que le prog si plantage il y a. Et le prog détecte si VB est toujours lancé sinon il quitte, tout simplement...

Donc laissez bien la DLL et le .EXE dans le même répertoire.

J'ai testé en ouvrant pleins de fenêtres de projet différentes et je n'ai pas eu de bug...


------------------

Dans le dossier "Projet", j'ai mis un exemple de défilement sur un MsFlexGrid suite à une question posée plus bas dans un des commentaires...
Et tant que j'y étais j'ai mis un autre exemple avec le composant ScrollBar de VB...
 

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

Historique

04 avril 2006 04:05:10 :
Ajout des fichiers bat pour l'installation
04 avril 2006 04:22:51 :
Marche pour les deux environnements
04 avril 2006 04:42:30 :
Maintenant ça donne le focus à la fenêtre qu'on veut défiler même entre plusieurs projets.
04 avril 2006 10:20:11 :
...
04 avril 2006 15:58:37 :
Changement complet du mode de fonctionnement
04 avril 2006 17:53:55 :
Ajout de la fenêtre de config
04 avril 2006 17:54:45 :
Ajout de la fenêtre de configuration
04 avril 2006 19:44:39 :
J'ai mis un ShellExecute à la place d'un Shell pour lancer le prog externe. Ca permet de ne pas attendre le retour de la fonction = lancement instantanné...
04 avril 2006 20:49:13 :
...
04 avril 2006 20:49:42 :
..
05 avril 2006 01:12:50 :
Plus besoin de relancer VB lorsque l'on change la config.
05 avril 2006 14:24:52 :
...
06 avril 2006 01:07:59 :
Ajout exemple MsFlexGrid
06 avril 2006 01:21:37 :
.
06 avril 2006 02:57:58 :
Marche aussi avec la fenêtre de débogage, des espions et des variables locales.
06 avril 2006 03:04:14 :
Chargement plus rapide
06 avril 2006 20:23:08 :
Maintenant en appuyant sur Ctrl gauche + défilement, on navigue de procédures en procédures.
06 avril 2006 20:42:20 :
Ajout d'un autre exemple avec le composant ScrollBar de VB

Commentaires et avis

signaler à un administrateur
Commentaire de clementio le 04/04/2006 04:25:24 administrateur CS

En plus, je viens de remarquer que si on scroll sur une fenêtre qui n'a pas le focus, ça lui redonne, cool non???

signaler à un administrateur
Commentaire de moustachu le 04/04/2006 08:43:55

Bonjour,

J'allais dire : "Mais ça existe déjà !!" mais ce n'est pas exactement la même chose. Je ne sais pas la version que j'ai mais ça fonctionne bien.

Au fait : c'est quoi SDI ?

++

Moustachu

signaler à un administrateur
Commentaire de clementio le 04/04/2006 08:47:00 administrateur CS

Tu vas dans outil > options > étendues et tu coches environnement de développement SDI... Je te laisse découvrir...

signaler à un administrateur
Commentaire de XtremDuke le 04/04/2006 10:37:31

Vraiment bien !

signaler à un administrateur
Commentaire de clementio le 04/04/2006 11:06:12 administrateur CS

La technique utilisée est un hook bas niveau sur la souris. En cherchant sur Internet (MSDN particulièrement), j'ai lu que Microsoft dit qu'on ne peut pas faire de subclassing sans appeler de DLL externe. Et bien, c'est faux... d'autres l'on fait. BruNews en particulier dont j'ai traduit le code C++ (je crois) en VB.

Et pour ce qui est de la partie ScrollBar, ça se complique. En fait pour scroller une fenêtre (celle de VB en tout cas), if faut envoyer un SendMessage avec comme paramètres:

- Le handle de la fenêtre à scroller (normal...)
- Le type de message, ici WM_VSCROLL (scroll vertical)
- L'action à faire, ici SB_LINEUP ou SB_LINEDOWN (+ ou - 1 ligne répétée 3 fois)
- Le handle du ScrollBar --> et là c'est chaud.....

Et bien dans ce cas là, si vous voulez tout savoir sur les messages des fenêtres, un seul prog : Spy++ (disponible dans le dossier Tools du CD VB6). Avec ce prog, on peut espionner tous les messages qui transitent en fonction d'une fenêtre particulière, de ces "enfants", des types de message....

J'ai donc compris avec ça qu'il fallait que je cherche dans les "enfants" de ma fenêtre de code VB. Grâce à l'API EnumChildWindows, j'ai pu récupérer le handle de mon scrollbar. Et tant que j'y étais, j'ai retrouvé ce handle en fonction de la position de la souris. Et oui, si il y a les 2 ScrollBars verticales d'activées, il faut bien le prendre en charge (voir capture).

Bref, tout ça pour dire que si voulez travailler avec les messages  des fenêtres, utilisez Spy++, on trouve vite fait ce qui nous intéresse...

signaler à un administrateur
Commentaire de moustachu le 04/04/2006 11:07:53

SDI : AHHHHRRGGGHHHH !!!! On dirait du Borland !!

signaler à un administrateur
Commentaire de clementio le 04/04/2006 11:09:33 administrateur CS

Depuis le début, je  bosse comme ça...

signaler à un administrateur
Commentaire de julescezar le 04/04/2006 11:19:16

Salut les gars ...
Personnellement j'ai installé le driver Logitech ( même si ma souris n'en est pas une ) et ça fait fonctionner la molette dans l'IDE ( en mode SDI ou non ).
Pratique quand même ...

PS : nommé "mw9791fra.exe" sur le site de logitech

signaler à un administrateur
Commentaire de clementio le 04/04/2006 11:43:14 administrateur CS

Par curiosité, j'ai télécharger MouseWare dont tu parles. A la fin de l'install, il me demande de redémarrer. Et là, plus de souris... C'est peut-être parce que je l'ai empêché de se lancer au démarrage. Mais bon, si le prog ne se lance pas au démarrage ou si il plante pour je ne sais quelle raison (ici c'est moi qui l'ai désactivé) et bien on a pas de souris... Pas terrible quand même.

Du coup, j'ai tout désinstallé au clavier. Et le comble c'est que ma souris est une Logitech!!!

signaler à un administrateur
Commentaire de julescezar le 04/04/2006 12:32:13

Je pense que c'est un coup de pas de chance !!!
Perso, j'ai mis ça au taff et le prog n'a jamais planté.
Effectivement il se lance peut être au démarrage ...
Bon ben après c'est toi qui voit.

Moi je trouve ça plus pratique qu'un ADD-IN mais chacun son point de vue koi ...

signaler à un administrateur
Commentaire de clementio le 04/04/2006 13:04:18 administrateur CS

Je préfère un AddIn qui se lance uniquement lorsqu'on utilise VB plurôt qu'un prog qui tourne en tâhe de fond en continu...

Si vous avez testé, vous avez pu voir qu'il y a un petit temps lorsqu'on ferme une fenêtre dans VB (Code, Form, Propriétés...). C'est dû au hook de la souris. Mais ça de vient vite chiant...

J'ai essayé de passer par une DLL ActiveX externe pour voir si ce ralentissement de fermeture de fenêtre avait baissé et non, ça ne marche pas. Ensuite j'ai utilisé la DLL C++ de BruNews. Idem, ça ralentit toujours la fermeture d'une fenêtre. Après j'ai essayé d'attribué un hInstance différent de celui de l'application à mon hook et ça ne marche pas non plus.

Mais j'ai trouvé, en compilant tout ça dans un projet normal. On exécute et le scroll marche bien dans les fenêtres VB et la fermeture des fenêtres est instantannée!!!

Donc je fais un prog juste avec un module qui lancera VB et quittera à la fermeture de VB. Il y aura les 2 versions dans le prochain zip...

signaler à un administrateur
Commentaire de moustachu le 04/04/2006 13:55:06

Je préfère également le AddIn, les logiciels pour souris perturbent parfois les captures souris dans les progs.

Clem>Y'a pas de mal à bosser comme ça, je n'ai pas pris l'habitude c'est tout. Au moins l'éditeur VB te laisse le choix ;o).

signaler à un administrateur
Commentaire de metalcoder le 04/04/2006 15:50:53

Salut clementio.

On est sur VbFrance et si une source existe et que tu la reprend pour l'ameliorer, moi en tout cas cela ne me pose aucun probleme bien au contraire et d'ailleurs la version 2 que j'ai mise n'est autre que la version de EBArtSoft mais pour le SDI.

Ma version fonctionnait pas tres bien je l'avoue mais j'avais d'autre projet et je n'y ai pas retoucher.

La tienne fonctionne beaucoups mieux sauf le temps de latence que tu a souligner precedemment, mais je vais essayer de compiler tout ca dans un projet pour voir.

@+

signaler à un administrateur
Commentaire de clementio le 04/04/2006 16:02:59 administrateur CS

Ca y est, ça marche impec!!!!

Alors c'est super simple:

- Un AddIn juste là pour lancer le prog externe à l'ouverture de vb.
- Le prog externe qui gére intégralement le hook, les scrolls et tout... Il vérifie à l'aide d'un timer si VB est toujours lancé sinon il quitte.

Voilà, c'est tout bête mais ça évite le temps de latence qu'on a pu constaté. Et en plus, géré le hook dans un process différent permet à VB de ne pas planter si le prog plante, pas mal, non???

signaler à un administrateur
Commentaire de julescezar le 04/04/2006 16:25:16

Pour en finir avec mon mouseware lol ...
Je pense que la discussion a bien fait avancé ton projet.

Maintenant mon petit exe de merde qui se lance en tache de fond ne gère pas que le wheel de l'IDE VB.
Il s'occupe de tous les autres prog aussi...

signaler à un administrateur
Commentaire de clementio le 04/04/2006 16:30:45 administrateur CS

Ohlaaa!!!! eh j'ai pas dis que c'était un prog de "merde".

Mais tu sais la programmation, c'est aussi souvent réinventer la roue....

Et je ne pense pas que MouseWare te permette de comprendre un peu mieux les hooks de bas niveaux et les envois de message à une ScrollBar...

Mais bon, reste avec ton prog et ne profite pas des exemples de code qu'on peut t'apporter à ce moment là...

signaler à un administrateur
Commentaire de clementio le 04/04/2006 16:33:43 administrateur CS

Si tu veux en venir au fait que je fasse un prog qui gère et VB et tout le reste, là ça peu devenir inréressant. Je chope tous les Wheels avec mon prog, ça ne doit pas être si dur de les redistribuer....

Je vais y réfléchir, merci de tes remarques ;-)....

signaler à un administrateur
Commentaire de julescezar le 04/04/2006 16:42:24

Ouais tu peux faire ça ...
Ca permettra de s'affranchir des problèmes que t'as constaté avec le mouseware.
En fait je parlais de mouseware parce que le logiciel qu'on vend au taff ne gère pas le wheel dans certains des contrôles et c'est la seule réponse temporaire qu'on a pu apporter au client lol.
Et comme toutes réponses temporaire ça devient parfois définitif lol.

Bon courage

signaler à un administrateur
Commentaire de Brosske le 05/04/2006 08:15:39

Le code en soi est bien fait, mais en effet, vous reinventez l'eau chaud je pense. Perso j'utilise l'utilitaire gratuite : FREEWHEEL pour faire fonctionner la roulette partout.

signaler à un administrateur
Commentaire de clementio le 05/04/2006 14:03:54 administrateur CS

Le but de ce site est de partager nos connaissances.

Le principal n'est pas l'utilité ou de savoir si un autre programme le fait déjà mais c'est de comprendre la manière d'y arriver.

Comme j'ai dit plus haut, ce n'est pas en installant FreeWheel que tu comprendras comment installer un hook bas niveau...

A chacun son ouverture d'esprit...

signaler à un administrateur
Commentaire de dany108 le 06/04/2006 00:43:44

Cette source est très intéressante  mais moi ce que j'aimerais trouver, c'est comment faire fonctionner la molette de souris avec un MsFlexGrid  dans une application compilée.

signaler à un administrateur
Commentaire de clementio le 06/04/2006 00:51:37 administrateur CS

Comme je l'ai dis un peu plus haut, utilise Spy++...

signaler à un administrateur
Commentaire de clementio le 06/04/2006 00:54:01 administrateur CS

En fait, il te suffit de trouver le handle de ton MsFlexGrid (c'est une fenêtre "fille" de ton appli). Et essaies de lui envoyer le même message que mon prog (avec les bons handles)...

Lis mes commentaires pour en savoir plus...

signaler à un administrateur
Commentaire de clementio le 06/04/2006 01:09:48 administrateur CS

Bon, je t'ai ajouté un exemple avec un MsFlexGrid dans le dossier "Projet". Tu as juste à lancer pour tester...

signaler à un administrateur
Commentaire de clementio le 06/04/2006 01:13:49 administrateur CS

Je viens de tester en lançant le prog + une autre aplli contenant un MsFlexGrid et ça marche aussi... En fait, ça envoie le message à n'importe quelle fenêtre de la classe "MSFlexGridWndClass"...

signaler à un administrateur
Commentaire de emboot le 06/04/2006 08:17:52

Moi je dis Bravo.
Un petit addin qui mèle l'utile à l'agréable.
De plus, la source et les commentaires qui en découlent s'avérent très instructifs pour des petits nouveaux comme moi.
L'approuver c'est l'adopter. (ou l'inverse)

signaler à un administrateur
Commentaire de dany108 le 06/04/2006 16:56:20

J'ai mis en application pour les MsFlexGrid : c'est top !!!!!!!!!!!
Bravo.

signaler à un administrateur
Commentaire de clementio le 06/04/2006 20:26:52 administrateur CS

Merci, content que ça marche...

J'ai rajouté un petit plus à l'AddIn. Maintenant en appuyant sur Ctrl gauche en défilant, ça navigue de procédures en procédures. Ca s'avère vite très pratique, n'empêche...

signaler à un administrateur
Commentaire de clementio le 06/04/2006 20:43:15 administrateur CS

J'ai aussi rajouté un autre exemple avec le composant ScrollBar de VB cette fois-ci...

signaler à un administrateur
Commentaire de elisath le 10/04/2006 09:36:29

Je suis désolé de dire ça mais j'ai essayé cette vesrion et elle ne fonctionne pas dans l'environnement SDI. Ou alors il y a quelque chose de plus à faire que de lancer zinstall.bat. Par contre tu parles d'un .exe à laisser avec la DLL alors que ton fichier zip ne comprends pas le fichier hookwheel.exe qui est sur le descriptif de la source. Peux tu refaire ton zip et inclure ce fichier.

signaler à un administrateur
Commentaire de gerard45 le 10/04/2006 10:03:30

j ai lance ca dans vb, a quoi sert la ligne "NBE_LIGNES = CLng(Command)" qui bug et qui de plus modifie la ligne précédente qui est "   NBE_LIGNES = 3" ??? une fois la ligne en cause commentée ca marche

signaler à un administrateur
Commentaire de clementio le 10/04/2006 12:56:33 administrateur CS

elisath --> C'est normal qu'il te manque le .exe. Il est supprimé lors du téléchargement de la source. Il te suffit d'ouvrir le répertoire "Projet", de lancer le projet et de créer l'exécutable hookwheel.exe. Ensuite, ferme VB et relance.

gerard45 --> En fait Command sert à récupèrer un argument passé au programme en ligne de commande vu que l'exécutable est censé être lancé par la DLL lui passant le nombre de lignes à défiler (3 par défaut). Ce n'est pas un programme à lancer seul normalement...

Dites-moi si ça résoud vos problèmes...

signaler à un administrateur
Commentaire de elisath le 10/04/2006 14:05:53

Je te remercie ça marche beaucoup mieux maintenant. Ca fait plaisir de pouvoir réutiliser cette molette sous VB. Je vais enfin ne plus regretter mon portable sous Windows 98 qui a toujours bien fonctionné.

signaler à un administrateur
Commentaire de clementio le 10/04/2006 14:07:26 administrateur CS

Merci, content que ça marche...

signaler à un administrateur
Commentaire de jipef le 04/07/2006 19:54:54

Pourquoi réinventer la roue....de souris
ici on trouve un pilote qui marche trés bien en VB
ce pilote permet le scroll en VB mêmem dans une fenetre de code partagée en 2
http://www.labtec.com/index.cfm/service/listing/EUR/FR,crid=68,crid2=1763
"mw9791fra.exe" sur le site de logitech ne fait pas ça

signaler à un administrateur
Commentaire de emboot le 05/07/2006 12:52:45

JIPEF

"Le but de ce site est de partager nos connaissances.

Le principal n'est pas l'utilité ou de savoir si un autre programme le fait déjà mais c'est de comprendre la manière d'y arriver." (Clementio)

Tout est dit, il n'y a rien à ajouter !!!

signaler à un administrateur
Commentaire de jipef le 05/07/2006 14:23:35

trés bien ce qu'a fait clementio
mais l'échange dans un forum est aussi de faire passer ses connaissances donc rendre service aux autres tout le monde ne peut passer son temps à faire du code pour du code il faut aussi être productif

par exemple 2 add-ins de VB6 qui sont des outils pro et gratuits ( je vous souhaite bien du plaisir si vous voulez les écrire !!)
MZtools  et SmartIndenter

http://www.mztools.com/index.htm
MZtools existe aussi pour VB net mais payant

www.oaltd.co.uk  est le site de  Stephen Bullen auteur de SmartIndenter
Carlos Quintero est le développeur de MZTOOLS

Salut à tous

signaler à un administrateur
Commentaire de danone le 14/08/2006 09:13:16

Tres bien comme code et tres pratique c'est ce que je recherchai et en plus ca m'a permis de decouvrir MZTOOLS qui est vraiment tres chouette et en Francais je suis vraiment comblé hi hi

signaler à un administrateur
Commentaire de yan35 le 18/12/2006 01:30:42

Sympa, j'essaye.
Merci

signaler à un administrateur
Commentaire de jipef le 18/12/2006 13:59:08

je me sers des 2 depuis 2 ans sans aucun pb
j'ai aussi un driver Logitech Itouch 2.22 289 mais il ne gère pas le scroll molete quand la fenetre de code est partagée . J'ai ajouté le driver de Labtech Mouse32a.exe version 2.0
le scroll molette est ok dans les  2 demie fentres
A+

signaler à un administrateur
Commentaire de Renfield le 30/03/2007 14:57:32 administrateur CS

je l'avait pas vue avant ta source Clem'

me rappelle certaines questions que tu m'avais posées sur le hook MOUSE_LL, y'a quelques temps, c'était donc (je suppose, a posteriori) pour ça ^^

signaler à un administrateur
Commentaire de FMatrix07 le 10/06/2007 09:21:22

Je trouve cet addin superbe, je cherchais depuis bien longtemps à le faire merci beaucoup.
Je le recommande à tous les utilisateurs de VB

Bonne prog et bonne continuation

signaler à un administrateur
Commentaire de titi2b le 10/10/2007 19:15:53

Je viens de découvrir cet addin et j'essaye de le faire fonctionner avec un datagrid.
Un petit coup de main svp.

a bientot

signaler à un administrateur
Commentaire de Chess0 le 23/04/2008 21:47:56 10/10

Très utile comme code et ça fonctionne impeccablement. Merci Clementio!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Roulette scroll souris en mode développement [ par CharlEm ] Bonjour, J'aimerai savoir comment activer la roulette de la souris ou le scroll pour les puristes en mode développement dans VB6. Au début, Scroll roulette souris dans MDI child [ par gagette ] Bonjour,J'ai un petit souci avec une MDI child.Ma forme est plus grande que sa forme parent. Des scrollbars sont donc visibles quand ma child est affi [vb.net] faire defiler du texte [ par malhivertman1 ] Bonjour, j'aimerai faire defiler du texte en vb.net mais je n'y arrive pas, et je ne trouve que des codes en vb 6.Qq pourrait-il m'aider? merci. Association Scroll / frame [ par Dudulee ] J'essaie d'associer un scroll vertical a un frame car je cree dynamiquement des Textbox dedans et si on rentre un trop grand indice ben ca sort du fra 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 Roulette de la souris dans programme [ par scortek ] J'ai besoin de contrôler une application exe.J'y arrive jusqu'à présent en utilisant les sendkeys.Le soucis, c'est que j'ai besoin d'utiliser la roule Chargement automatique d'un Addin dans Excel [ par s_kashiew ] Salut,J'aimerai faire un chargement automatique d'un addin a l'ouverture d'un Excel.Voici comment je procede:    '.:: Open Excel ::.    Set ExcelWbk = Shared AddIn Outlook [ par iguypouf ] Bonjour à tous, J'ai codé un AddIn pour Outlook permettant d'uploader une copie des mails dans une bibliothèque numérique.Je dois pour ça enregistrer Capturer l'évenement "roulette souris" sans avoir le focus [ par Nicossg1 ] Bonjour à tous,Je cherche à détecter les mouvements de la roulette de la souris  sans avoir le Focus sur mon appli. J'arrive à capturer les boutons ga Quels Addin VB utilisez vous ? [ par MadM@tt ] Salut à tous,Dites-moi donc, quels addin avez vous ajouté à votre vb chez vous ?Parce que j'en cherche, mais j'ai du mal à en trouver, et soit ils son


Nos sponsors

Sondage...