Ce code explique, je l'espère, un peu le subclassing.
Il permet de récupérer des evénements supplémentaires sur des contrôles (ici une ListBox, mais on peut mettre n'importe quoi).
Exemple d'evénements récupérables :
- double clic avec le bouton droit.
- clic avec la molette (ou le bouton du milieu).
- double clic avec la molette (ou le bouton du mileu).
11 mai 2005 à 13:50
Windows fonctionne avec des systemes de messages envoyés aux fenetres. Pas simplement ce que l'on appelle fenetre (le truc avec le bouton fermer, les menus....) mais les boutons, listbox, forms,... qui sont elles aussi des fenetres
Chaque action utilisateur, et un bon nombre d'evenements systemes, ou simplement des requetes faites au fenetres, passent par des messages.
quand vous passez la souris au dessus d'un bouton, par exemple, il recevra le message WM_MOUSEMOVE , indiquant les coordonnées du curseur... Cet evenement est visible sous VB (MouseMove) qui traduit en fait le message, et nous le fournit pour programmer nos chers programmes.
Le subclassing, consiste en l'ajout avant le controle d'une fonction filtre qui va recevoir les messages.
il sera alors possible de modifier les informations contenues, le code de retour, de simplement tenir compte de l'apparition du message... ou de décider de ne pas l'envoyer au controle...
cela vous donne accès a deux nombreux evenements inaccessibles sans cela. (par exemple, l'utilisation de la molette, le clic dans la barre de titre, le deplacement d'une fenetre, .....)
un point sur le subclassing dans VB...
VB est TRES chatouilleux quand on parle de subclassing
des reflexes a prendre :
- ne JAMAIS utiliser le bouton STOP de l'interface, car il coupe tout violament, et ne permet pas de stopper le subclassing : VB crashe...
- toujours stopper le subclassing quand vous fermez vos fenetres (possibilité de se greffer sur le message WM_DESTROY)
- ne pas utiliser de point d'arrets, ni mettre en pause l'execution, les messages continuent a arriver, VB crash une fois de plus
- Sauvegardez souvent... le subclassing implique bien souvent des copie mémoire, des API qui peuvent en phase de conception etre bancales, et faire crasher VB
Loin de moi l'envie de vous effrayer, je parle en connaissance de cause, soyez en surs.
Une solution pour stabiliser le tout : l'utilisation d'une Dll pour faire le subclassing. Cela vous permet d'utiliser le bouton STOP (que je deconseille vivement tout de meme, il n'est pas sain) ou les points d'arret...
En phase de conception, je conseille l'utilisation d'une dll, qui vous fera gagner du temps
voici un lien vers l'une de ces dll
http://www.vbfrance.com/code.aspx?id=19625
(je preche pour ma paroisse, c'est ma source ;) les messages sont pour la plupart inclus, et certaines fonctions utiles ont été integrées ; le subclassing s'integre alors très vite dans une appli)
Aucun risque en mode compilé, il est alors possible de deconnecter la dll, et passer par du sublcassing comme montré dans la présente source.
un simple test :
If App.LogMode <> 0 Then
StartSubClassing
End If
permet de ne lancer le subclassing qu'en mode compilé
(une autre solution est l'utilisation de compilation conditionnelle :
#If DEBUG = 1 Then
StartSubClassing
#End If
voila, j'espere avoir été suffisament clair pour vous donner envie de plonger dans les possibilités offertes par le subclassing.
11 mai 2005 à 14:20
11 mai 2005 à 16:23
Simplement une source simple,claire et concise pour ceux qui découvre le subclassing, on aimerait en avoir plus de sources comme cette dernière, pour ceux qui debute ou sont initié comme moi. 9/10
A+++
12 mai 2005 à 19:21
un grand merci ;)
12 mai 2005 à 20:33
un gros merci :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.