Faire bouger dynamiquement un ComboBoX [Résolu]

Signaler
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour

Avec l'aide de MPI,j'ai réalisé des controles que je peux déplacer pendant l'execution d'un programme.
Mais j'ai un probleme avec les combobox.
En effet, apparement ils ne gerent pas l'evenement mousemove, mousedown, mouseup

Alors comment faire pour faire bouger ce genre de controle

Merci de votre aide
Bonne journée

22 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
DKS
-> j'ai proposé le subclassing parce qu'en effet il n'y a pas de mouse_ sur le combo...

andrebernard -> moins difficile qu'il n'y paraît, surtout avec les source existantes prêtes à l'emploi
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

2 solutions (peut-être plus)

=> récupérer la position de la souris (timer)
si la souris est au dessus de la zone combo, repérer l'état mousedown

=> subclassing

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
Salut,

Hum, il me semble que les contrôles en question font partit d'un groupe de contrôle, non ? A ce moment là, ils gère très bien le MouseMove, MouseDown, etc., mais il faut les identifier par leurs index !
______________________________________
DarK Sidious
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Merci de vos reponses

Pour PCPT
Je crois que cette methode est au dessus de mes faibles moyens.

Pour le Maitre
Oui il fait bien partie d'un groupe de controle.
Mais comment fait-je pour detecter l'evenement mousemove, puisqu'il est pas dans la liste des evenements quand je clique sur ce combo de malheur ???
.
La procedure :
Private Sub ComboParametre_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
N'existe pas dans la liste, y'a pas idée, il est bizarre ce crosoft, je ne vois vraiment pas en quoi, les combos sont des controles differents des autres ?????
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
Salut,

La sub n'est pas listée dans le combo des event disponibles ??? C'est bizarre cà !

Essaye tout de même en tappant directement l'événement à la main : à moins qu'il ne s'agisse d'un ocx qui ne possède pas d'Event MouseMove, l'event doit être géré normalement !

Tu crées ton groupe de contrôle comment ? Un contrôle sur ta form avec un index à 0, et tu charge les autres par des Load(nomContrôle) ?
Tu créer un contrôle en WithEvents : private WithEvents tonControl As ComboBox ?
Tu créer les contrôles en lateBound : set tonControl = new ComboBox (ou un truc du genre, je me rappelle plus).
______________________________________
DarK Sidious
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
La sub n'est pas listée dans le combo des event disponibles ??? C'est bizarre cà !
J'te le fait pas dire

Bah non y'a pas du tout d'evenement souris sur ce COMBO
Je prend celui qui est donné dans la boite à outil de base.
J'ai VB6 mais j'ai pas installé le SP6, j'espere qu'iln'avaient pas fait la modif apres ....

Tu crées ton groupe de contrôle comment ? Un contrôle sur ta form avec un index à 0, et tu charge les autres par des Load(nomContrôle) ?
Oui c'est exactement ça

J'ai pas pensé à regarder si y'a pas des boutons plus évolués dans les autres OCX
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
Salut,

Ok donc ca vient pas d'un usercontrol, et ca ne vient pas non plus d'un latebinding.

T'es sûr du nom de ton contrôle ? Il n'y aurait pas une sub qui s'appelle ComboParametre_MouseDown mais sans le index en paramètre ?
______________________________________
DarK Sidious
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Je viens de regarder.
J'ai chargé le "microsoft forms 2.0 object  library" et commme par miracle y'a a peu pret les memes controle que la boite a outil de base, mais dans ce combo la, y'a bien les evenements mouse

C'est dingue,pourquoi ils mettent pas tout de suite ceux la, si ils sont mieux ?????
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
Salut,

Oula, ne les utilise pas !!! Ils ne sont pas redistribuables ! Cela oblige les futurs utilisateurs de ton programme d'avoir office d'installé !

Non non je te rassure tout de suite, le combobox de base de VB possède les événements mouseDown, mouseMove, etc. !
______________________________________
DarK Sidious
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
T'es sûr du nom de ton contrôle ? Il n'y aurait pas une sub qui s'appelle ComboParametre_MouseDown mais sans le index en paramètre ?
Bah pour etre sur ....
Je viens d'installer le SP6
J'ai carrement ouvert un nouveau VB avec un programme tout neuf
Je créé un combo et j'ai pas d'evenement mouse
C'est de la folie, la j'y comprend rien, comme d'habitude d'ailleur.....

Regarde par toi meme :
http://erdsjb.free.fr/Combovb6.jpg
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Je confirme encore, quand je fais F2, pas d'evenement mouse sur les combos ....
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
Salut,

Il buggue drolement ton vb !

Essaye en le réinstallant à la limite, on ne sait jamais !

Jamais rencontré de problème similaire !
______________________________________
DarK Sidious
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Alors j'ai fait "tout c'est comme t'a dit", désinstallé VB6 et réinstallé et ça fait pareil.


Pas d'evenement mouse sur combobox


J'suis noir, non ?
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Alors la, meme le maitre, c'est fait avoir .....
Chez toi aussi t'a pas d'evenement mouse sur tes combos ?????
MAis alors pourquoi Dark lui il en a, c'est pas juste .....

Vérifie bien, s'il te plait, car je sais plus quoi faire ......
A force d'installer et desinstaller VB, j'ai des copeaux autour du disque dur

Tu me sauve la vie

Bon je vais essayer de comprendre, j'ai vu un cours sur le subclassing, je vais le lire ...
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
Salut,

Lol, ben zut alors, j'étais persuadé que le combo avait les évents classiques mouse !

Sont quand même bien boulet chez microsoft de ne pas les avoir mis !

Désolé pour la perte de temps et d'énergie (j'avais pas vb sous la main pour vérifier).
______________________________________
DarK Sidious
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Ouf me voila rassuré.
C'est pas grave j'ai maintenant un VB tout neuf qui brille
Alors la j'suis bien de ton avis, c'est de la segregation ça, ou je n'y connais rien.
Peut etre que le programmeur,qui s'occupait des combo a été viré avant de finir ...

Ce qui est encore plus dingue, c'est qu'en VBA y'en a .
C'est pas le monde a l'envers ça ...

Un giciel 2X plus cher et qui a moins que l'autre
Y'a que bilou qui peux nous faire des trucs pareils.

Bon j'arrete de réinstaller windows et de démonter ma carte mere

Je suis tombé sur un POST interessant sur le subclassing.
Mais evidement pas d'evenement mousemove
J'aurais bien rajouté ce dernier mais je ne connais pas la valeur de la constante, ou les trouvez vous les constantes ????




Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)





Public Const WM_LBUTTONDBLCLK = &H203





Public Const WM_LBUTTONDOWN = &H201





Public Const WM_LBUTTONUP = &H202





Public Const WM_MOUSEMOVE = ?????





Public OldProc As Long





Sub HookForm1()
    OldProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub





Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case uMsg
        Case WM_LBUTTONDBLCLK
        Form1.Print "Bouton gauche double click"
        Case WM_LBUTTONDOWN
        Form1.Print "Bouton gauche enfoncé"
        Case WM_LBUTTONUP
        Form1.Print "Bouton gauche rélaché"
        Case WM_MOUSEMOVE
        Form1.Print "Souris bouge"
    End Select
    WindowProc = CallWindowProc(OldProc, hwnd, uMsg, wParam, lParam)
End Function





Sub UnHookForm1()
    Call SetWindowLong(Form1.hwnd, GWL_WNDPROC, OldProc)
End Sub
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
C'est bon j'ai trouvé la réponse
La valeur de la constante est &H200
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
c'est la bonne oui

tu peux en trouver "beaucoup" dans l'API viewer (APILOAD.EXE) fourni avec VB6.

mais j'ai testé par subclassing, tu a l'évènement en entrée et sortie de zone (ouver out) mais pas de move.

peut-être trackmouse, j'essaye et te tiens informé...

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
eh non....
over out (ou HOVER LEAVE) interceptable mais c'est tout....

si tu dois vraiment avoir le MOUSEMOVE, va falloir passer par un timer apparemment (première solution proposée)

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
avec cette classe çà devrait aller

http://www.vbfrance.com/code.aspx?ID=44077

++
PCPT  [AFCK]