chieur
Messages postés67Date d'inscriptiondimanche 22 février 2004StatutMembreDernière intervention27 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 20151 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és2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 19 mars 2007 à 22:47
Ahh ok effectivement ça permet d'eclaircir le code. Merci
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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é)
SkyRocKo
Messages postés174Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention18 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és1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 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és1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és47Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention22 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és47Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention22 juin 2005 17 juin 2005 à 23:04
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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 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és1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 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és608Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention22 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és4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 29 févr. 2004 à 00:33
Afyn> Merci ;-P (le remerciement sont rare !)
Afyn
Messages postés608Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention22 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és608Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention22 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDerniè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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 20 janv. 2004 à 22:43
Mise à jour effectuée.
bubble44
Messages postés200Date d'inscriptionlundi 10 mars 2003StatutMembreDerniè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és12Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention20 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és1221Date d'inscriptionjeudi 23 août 2001StatutMembreDerniè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és564Date d'inscriptionjeudi 21 février 2002StatutMembreDerniè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és608Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention22 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és161Date d'inscriptionmardi 19 juin 2001StatutMembreDernière intervention10 avril 20072 19 janv. 2004 à 13:41
Superbe :))
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és608Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention22 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és4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és164Date d'inscriptiondimanche 16 novembre 2003StatutModérateurDernière intervention 5 juillet 20051 19 janv. 2004 à 06:44
6 juil. 2010 à 20:16
3 juil. 2010 à 00:26
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.
2 juil. 2010 à 23:11
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.
19 mars 2007 à 22:47
19 mars 2007 à 21:56
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 ^^
17 mars 2007 à 16:13
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 ?
5 juil. 2006 à 01:47
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
2 févr. 2006 à 17:30
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!
++
2 févr. 2006 à 17:11
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
2 févr. 2006 à 16:48
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 !
++
22 juin 2005 à 12:14
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
22 juin 2005 à 09:40
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
21 juin 2005 à 20:13
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
21 juin 2005 à 09:17
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.
21 juin 2005 à 08:25
Merci d'avance.
++
21 juin 2005 à 08:17
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.
20 juin 2005 à 09:44
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)
18 juin 2005 à 20:49
Merci d'Avance...
17 juin 2005 à 23:04
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...
25 juin 2004 à 22:44
par contre, ensuite,tu peux tester, et voir si les evenement (souris, je suppose) se rapportent ou pas a ta partie.
25 juin 2004 à 11:59
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
9 mars 2004 à 23:55
@+
29 févr. 2004 à 11:55
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
29 févr. 2004 à 00:33
28 févr. 2004 à 20:14
Remerciements au passage...
A+
Afyn
28 févr. 2004 à 13:43
l'ajout de la gestion de TrackMouseEvent est un simple "Gadget". On aurait tout aussi bien pu le faire de l'exterieur.....
28 févr. 2004 à 13:03
C + rapide que de faire l'appel API par un TLB ?
Afyn
28 févr. 2004 à 11:55
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....
25 févr. 2004 à 09:13
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
20 janv. 2004 à 22:43
20 janv. 2004 à 21:18
;-)
(!)
20 janv. 2004 à 09:07
20 janv. 2004 à 08:41
19 janv. 2004 à 19:07
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) !
19 janv. 2004 à 17:58
- Elle est ou la DLL ? Dommage je voulais bucher un peu (Comme Jeanne d'Arc...)
-> EB : Belle image ...
A+
19 janv. 2004 à 13:41
19 janv. 2004 à 13:40
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)
@+
19 janv. 2004 à 13:09
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...
19 janv. 2004 à 12:42
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
19 janv. 2004 à 09:44
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
19 janv. 2004 à 06:59
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....
19 janv. 2004 à 06:44
Thks