DLL - SUBCLASSER RAPIDEMENT DANS VOS APPLI

ZogStriP Messages postés 164 Date d'inscription dimanche 16 novembre 2003 Statut Modérateur Dernière intervention 5 juillet 2005 - 19 janv. 2004 à 06:44
chieur Messages postés 67 Date d'inscription dimanche 22 février 2004 Statut Membre Dernière intervention 27 mai 2009 - 6 juil. 2010 à 20:16
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/19625-dll-subclasser-rapidement-dans-vos-appli

chieur Messages postés 67 Date d'inscription dimanche 22 février 2004 Statut Membre Dernière intervention 27 mai 2009
6 juil. 2010 à 20:16
rey \ reinfield ? eh bin .. ah certains moments elle faisait partie integrante de mon coding je viens de l'apprendre des annees apres .. un merci un peu tardif
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2010 à 00:26
Merci pour le com'

Perso, je ne me sers plus de la dll...

surtout maintenant qu'on peut filtrer les messages dans le module...
vu que l'ide est securise, ca va, j'ai pas de plantage a deplorer.
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
2 juil. 2010 à 23:11
Durant les premières étapes de mise au point de subclassing (recherche des messages...) ; conseil tu d'utiliser ta DLL ou ton MODULE-SUBCLASSER_38442 ?
Puis, une fois que notre subclassing est au point, conseil tu d'utiliser ta DLL ou ton MODULE-SUBCLASSER_38442 ?
Je demande cela car j'ai un petit doute.
En tous cas, j'adore tes sources, elles sont très bien structurées.
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
19 mars 2007 à 22:47
Ahh ok effectivement ça permet d'eclaircir le code. Merci
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mars 2007 à 21:56
un composant peut subclasser n fenêtres...
tu peux dire que les messages concernant telle fenetre seront redirigés sur la proc #1, que ceux de telle autre iront sur la proc #2....
c'est completement facultatif ^^
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
17 mars 2007 à 16:13
Salut Renfield,
Ce code est vraiment très interessant, développer sans craindre l'instabilité de l'IDE. Par contre j'ai cherché un peu mais j'ai pas compris l'interet d'avoir 5 messages de retour différents pour les evenements ?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 juil. 2006 à 01:47
Pour ceux qui ont finallement mis au point le code de SubClassing, et qui ne veulent pas distribuer la Dll...

voici un module qui vous permettra de SubClasser tout aussi facilement, mais n'apportant pas cette stabilité de l'IDE (aucun soucis en mode compilé)

http://www.vbfrance.com/codes/MODULE-SUBCLASSER_38442.aspx
SkyRocKo Messages postés 174 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 18 février 2006
2 févr. 2006 à 17:30
Ok merci,

Je croyais que c'était la même chose Hooker et SousClasser, maintenant ça devrait aller !

C'est vraiment génial :)

Encore merci, et bonne continuation!

++
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 févr. 2006 à 17:11
pour WH_CBT est un Hook...

ca diffère un peu du SubClassing, et les APIs à appeller ne sont pas les mêmes

un exemple dispo ici :
http://www.vbfrance.com/code.aspx?ID=24695
SkyRocKo Messages postés 174 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 18 février 2006
2 févr. 2006 à 16:48
Salut,

Superbe DLL, simple et efficace !

Cependant, je cherche à détecter la création de fenêtres avec 'WH_CBT' mais je ne parvient pas à détecter ce message, je suppose que cela provient du hWnd (form1.hWnd) mais j'ai déjà essayé avec le handle du bureau grâce à l'API 'GetDesktopWindow', pas moyen :(

Comment gérer cela avec cette DLL ?

Merci d'avance !

++
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
22 juin 2005 à 12:14
Oups, merci encore Renfield. En fait j'avais fait le test avec

Private Sub Grille_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub

Et cela n'vait pas marché car le controle n'avais pas le focus. lol quel naze.

Merci.
Au fait vraiment super classe ta dll
10/10
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 juin 2005 à 09:40
Si : KeyDown & KeyUp !

Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = VbKeyF2 then
MsgBox "Rename"
End IF
If KeyCode = VbKeyC And (Shift And vbCtrlMask) then
MsgBox "Control + C"
End If
End Sub
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
21 juin 2005 à 20:13
Ok merci,
j'ai même trouvé un peu mieux avec KeyPress.
CTRL+C => KeyAscii = 3
CTRL+V => KeyAscii = 22

Par contre pour F1 à F12 je suis un peu embetté. N'y a-t-il vraiment aucun moyen de récupérer leur pression dans un control utilisateur ?

Merci encore
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 juin 2005 à 09:17
Utilises donc KeyDown / KeyUp ....

KeyPress gère les touches par rapport au code ascii du caractère résultant de la pression de cette touche...

F1 -> F12 ou les touches fléchées ne produisent pas de caractère en sortie.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
21 juin 2005 à 08:25
j'oubliais et pour les touches F1 à F12. en effet l'evenement KEYPRESS ne les recupère pas.
Merci d'avance.
++
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
21 juin 2005 à 08:17
Salut,
est-il possible de savoir si la touche CTRL est enfoncée. Je voudrai ajouter les fonctions COPIER / COLLER sur un control qui n'en a pas à l'origine. Si oui quelle message utiliser ?
Merci d'avance.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 juin 2005 à 09:44
appeler RegSvr32, oui , sans probleme, c'est une des solutions pour enregistrer les dll...

On error Resume Next
Set a = New MON_OBJET_DLL
If Err Then
On error Goto 0
Shell "RegSvr32 MaDll"
On error Resume Next
Set a = New MON_OBJET_DLL
If Err Then
MsgBox "Impossible d'enregistrer la Dll"
'# On quitte le programme
Unload Me
Exit sub
End If
End If


l'autre solution, et qui permet de ne pas avoir de message de confirmation de Regsvr32, c'est de faire la même chose que lui : Executer la fonction dllregisterserver de l'ocx... (LoadLibrary, etc)
danielgrd Messages postés 47 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 22 juin 2005
18 juin 2005 à 20:49
Problème précédent résolu... Je ne suis pas fier de moi... J'avais oublier d'enregistrer la DLL... Mais est-il possible d'enregistrer une DLL en visual basic? Effectuer la commande Regsvr32 en vb???

Merci d'Avance...
danielgrd Messages postés 47 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 22 juin 2005
17 juin 2005 à 23:04
Bonjour,

J'obtiens un erreur en utilisant Rey_SubClasser...
Pour voir la source, voir ici: http://www.vbfrance.com/code.aspx?id=19625

Mon programme, une fois compilé en .EXE à toujours bien fonctionné... Mais je l'avais toujours testé sur le même ordinateur...

Il y a quelques jours j'ai décidé de le tester sur un autre ordi...

Et là, avant même que mon logiciel s'exécute, j'obtiens le message d'erreur suivant :
'Vous ne disposez pas de la licence appropriée pour utiliser cette fonctionnalité'

Et ensuite cela quitte....

Après des d'intenses recherches, j'en suis venu à l'évidence que le problème viens de ici:
------------------
Private Sub Form_Initialize()
If SIP2 = 0 Then
Set SubClasser = New ReySubClasser
Call SubClasser.Controls.Add(Text_Msg.hWnd)
Call SubClasser.Controls.Add(Text_Sujet.hWnd)
Call SubClasser.Messages.Add(WM_PASTE)
Call SubClasser.StartSubClassing
End If
End Sub
----------------

En effet, lorsque je supprime cette partie ou la remplace par n'importe quoi d'autre:
----------
Set SubClasser = New ReySubClasser
Call SubClasser.Controls.Add(Text_Msg.hWnd)
Call SubClasser.Controls.Add(Text_Sujet.hWnd)
Call SubClasser.Messages.Add(WM_PASTE)
Call SubClasser.StartSubClassing
------------

Mon programme s'ouvre et aucun problème à l'horizon...

C'est bizarre parcequ'il ne s'agit pas d'un problème de .DLL parcequ'en supprimant ces 5 lignes j'ai laissé la référence Rey_Subclasser (rey_subclasser.dll) dans mon prog....

J'ai essayé d'effacer ligne par ligne les 4 dernières lignes pour voir si ce n'était que l'une d'elle qui causait le problème mais en vain... L'erreur persiste... Cela doit donc provenir de la 1ere ligne et donc il faut absolument supprimer les 5 lignes...

J'ai essayé de le faire exécuter lors du chargement (Form_Load) au lieu de avant (Form_Initialize), je ne sais pas si cela aurais quand même fonctionné, mais de toute manière j'obtient une autre erreur : Erreur d'exécution 429... Et même en se consacrant à résoudre cette deuxième erreur on ne sais pas si la première referra son apparition par après...!!!

Donc mieux vaut, à mon avis, se consacrer qu'à la première erreur...

En tout cas... Je vais aller réécrire ce post dans les commentaires de la source officielle Rey_SubClasser de Renfield... Au cas ou...

Je ne sais plus quoi faire.... S'il-vous-plaît...

Merci d'avance...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 juin 2004 à 22:44
tu Subclasse une fenetre.... pas juste un morceau....

par contre, ensuite,tu peux tester, et voir si les evenement (souris, je suppose) se rapportent ou pas a ta partie.
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
25 juin 2004 à 11:59
Salut,
je voulais savoir ,si c'est possible, dans ce subclassing, de faire un sublclassing dans un controle mais uniquement sur une partie de ce controle, c'est a dire un rectangle spécifique et non sur tout le controle ?
si c'est possible, de le mettre dans la dll

merci
bonne prog
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
9 mars 2004 à 23:55
salut je suis dsl, je sais que je parle as des pro par ici mais pour repondre a nicolux, j'ai fait un tit exemple utilisant la dll sur un controle UpDown a http://www.vbfrance.com/code.aspx?ID=20739, je ne fais pas de pub loin de la, mais c'est pour avoir un exemple si ca peut interesser certains comme ca l'est pour moi.

@+
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
29 févr. 2004 à 11:55
J'ai trouvé le problème pour passer les types ... avec ODL Créator !
KI veux savoir ?
...
...
...
Si tu fait un TLB, et que tu le référence dans ton projet, tu peux qd meme redéclarer l'API par dessus et c'est cette déclaration ki a la priorité.
Si tu fait pareil avec les declar de Type Tu as un msg passage par ref incompatible ...
Donc 1 solution :
Tu declares dans le TLB les API et les types dont tu as besoin, mais tu surcharge pas ..
Voilà la petite précision.. et ma trés petite contribution...
Bon dimanche
A+
Afyn
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
29 févr. 2004 à 00:33
Afyn> Merci ;-P (le remerciement sont rare !)
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
28 févr. 2004 à 20:14
Moi je suis devenu adepte des Tlb's grace a tes sources et a celles de EbArtSoft ...
Remerciements au passage...
A+

Afyn
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 févr. 2004 à 13:43
Je n'ai pas ici utilisé de .TLB..... je pourrais, remarque....

l'ajout de la gestion de TrackMouseEvent est un simple "Gadget". On aurait tout aussi bien pu le faire de l'exterieur.....
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
28 févr. 2004 à 13:03
CT un minimum ...
C + rapide que de faire l'appel API par un TLB ?

Afyn
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 févr. 2004 à 11:55
J'ai fait une petite mise à jour qui pourrais vous interesser....

j'ai inclu WM_MOUSEHOVER & WM_MOUSELEAVE....

en gros, vous pouvez demander à être averti des allées et venues du curseur sur vos contrôles....
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
25 févr. 2004 à 09:13
Salut Renfield,

J'essaye ta DLL mais il y a des références "en dur" dans ton fichier "Rey_SubClasser.vbp". Rien de bien grave cependant, mais bon... Comme je ne suis pas sûr de faire des commentaires constructifs ;o)

++

Moustachu
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 janv. 2004 à 22:43
Mise à jour effectuée.
bubble44 Messages postés 200 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 3 août 2004
20 janv. 2004 à 21:18
Pas de Capture d'ecran ? il se ficherait pas de nous ce Renfield ?

;-)

(!)
cs_Nicolux Messages postés 12 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 20 janvier 2004
20 janv. 2004 à 09:07
Salut Renfield, comme à ton habitude, tu fais de belles choses. Cependant, pourrais-tu donner d'autres exemples de SubClassing en plus des dimensions min et max d'une forme ?
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
20 janv. 2004 à 08:41
La seule fois ou j'ai eu besoin de sousclasser, c'était pour faire un écran de veille qui s'intègre à 100% dans Windows : il fallait pour cela récupérer les appels aux boites de dialogue standard et afficher des dialogues perso à la place : c'était pour la saise du mot de passe et aussi pour la prévisualisation de l'écran de veille dans le panneau standard de Windows.
lumesh Messages postés 564 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 7 novembre 2008
19 janv. 2004 à 19:07
EBArtSoft > DAALLLAAASSS, lol JR est de retour ? ;)
Sympa ton explication. Mais le probleme est tjrs le meme !
Si il y aun 2eme fils qui vt aussi intercepter le courier bah il va y avoir bataille (conflit) !
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
19 janv. 2004 à 17:58
Dernière remarque à Maitre Renfield :
- Elle est ou la DLL ? Dommage je voulais bucher un peu (Comme Jeanne d'Arc...)

-> EB : Belle image ...

A+
cs_zappy Messages postés 161 Date d'inscription mardi 19 juin 2001 Statut Membre Dernière intervention 10 avril 2007 2
19 janv. 2004 à 13:41
Superbe :))
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
19 janv. 2004 à 13:40
Renfield> t'es pas obliger de faire ça dans le noir
tu peut allumer la lumiere ! lol ;-)

Afyn> Si je peut faire un topo je dirais que pour sous-classer
dans vb il "VAUT MIEUX" utiliser une dll lorsque que l'on met
au point son programme... pk ? voila une reponse :

Image un prog qui sous classe la feuille Form1
donc on fait SetWindowLong(Form1.hwnd,GWL_WNDPROC,addressof MaProc)

ou MaProc sera une fonction du type
Function MaProc&(byval hwnd&,byval umsg&,wparam&,lparam&)
lorsque tu faire LECTURE dans l'ide vb crée un espace
memoire pour la procedure tout marche bien

maintenant imaginon qu'il y ai une erreur dans la procedure
MaProc une boite de message apparait et stop l'execution
MAIS la fenetre continue a recevoir des message du systeme
et donc continue d'appeler la procedure MaProc qui genere
une erreur a chaque fois. et meme pire il se peut que tu modifie
le parametre qui cause une erreur et donc vb crée un autre espace memoire pour la procedure qui ne correspond plus a celle d'avant
et a chaque message que reçoi ta fanetre c'est un appel vers une
adresse memoire dont nul ne connait le code qui s'execute et et
et BOOOM ça freeze ou bien c'est le crash !

maintenant si tu utilise une dll (compiler bien sur),
vb vas la mapper avant d'executer ton code et si une
erreur apparait ton adresse memoire reste tjrs a la meme
place donc aucun bug et pas de reecriture de code surtout !

bien sur une fois que tout est ok rien ne t'empeche de transposer
ton code de sous classement dans tonprogramme pour gagner
de precieux cycle... c'est plutot un choix a faire !

imagine que windows soit une sorte de ville avec plein de boite au lettre et des courrier qui s'echange de maison en maison informant
un habitant qu'il doit faire tel ou tel chose... tu me suis ?

imagine que ton programme vb soit une maison avec plein de
personne dedans ta Form1 le pere ton CommandButton1 le fils
imagine que le pere reçoi du courrier qui lui dit "a l'instant T vous devez devenir tout petit" c'est un "click sur la minimizebox" puis
le fils dit a sont pere "papa fait une cabriolle" par ce que j'ai reçu
un courrier qui me dit que tu doit le faire "c'est un click"

jusqu'a la pas de probleme

mais imagine maintenant que le pere puisse lire le courrier du fils
avant que celui ci le reçoive pour lui permettre d'anticiper ou de
modifier les ordre qui lui sont donné !!! et bien c'est ça la sous classement

c'est un peu "space" mais c'est ma vision des choses ! lol

aller apres ce long monologue je vais
reposer mon creeau deux minutes (c'est un cerveau 2Khz)

@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 janv. 2004 à 13:09
OK, je ferai un topo un peu plus clair ce soir...

EB, je regarderais ca dans la nuit ;)

Afyn
On peut très bien ne pas utiliser de dll, pour faire du subclassing. Mais Vb est franchement chatouilleux... Auusi, tu risques de devoir dire adieu aux commandes de debogage, au bouton STOP (qu'il ne faut cependant pas utiliser...) et même, ton appli peut planter dès qu'un box d'un message d'erreur apparait..... bref, c'est pas franchement viable...
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
19 janv. 2004 à 12:42
Pourquoi une DLL (puisque d'après EB, chaque fois que l'on fait appel à une DLL ca coute des cycles supplémentaires) ?
J'aimerai bien un petit tutorial sur le Sub Classing, l'intérêt, les avantages, les gains et ce que ça coute.
Et si possible plutôt que des tonnes d'explications écrites, deux ou trois shémas bien simple pour que tous le monde puissent comprendre (je sais bien que je suis exigeant, ...) comme ca tous le travail que vous avez fournis sera valorisé un max ...
Et n'hésitez pas à mettre vos talents en commum (Ren + EB par ex)
A+
Afyn
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
19 janv. 2004 à 09:44
C'est excelent... cela dit je vois plein de façon d'optimiser le tout !

ex:

- creer un .tlb (pour supprimer le api en double
c'est ta specialité en plus ;-) )

- remplacer TLBINF32 par un petit copymemory
ou un petit and &hffff&

- penser que plusieurs objet peuvent sous classer la meme
feuille dans ce cas ça plante !

enfin j'ai regardé rapidement peut etre que je me trompe

@+ Ren
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 janv. 2004 à 06:59
lol

Ouais, c'est sur que je ferai mieux d'expliquer tout ça.....

je ferai un zoli truc ce soir, promis !!

dison juste pour l'instant que ca permet de faire des trucs de oufs, et ce en ayant en fait plus de controle sur ce qui arrive a nos fenetres....
ZogStriP Messages postés 164 Date d'inscription dimanche 16 novembre 2003 Statut Modérateur Dernière intervention 5 juillet 2005 1
19 janv. 2004 à 06:44
C'est quoi le SubClassing et ça sert à quoi ?

Thks
Rejoignez-nous