Salut,
Pour faire suite au topic http://www.developpez.net/forums/sho...d.php?t=408874, sur les coordonnées d'un usercontrol, je souhaite maintenant que les coordonnées X & Y de celui-ci s'affiche sur ma form.
Comment procéder ?
Merci par avance
Salut,
Pour faire suite au topic http://www.developpez.net/forums/sho...d.php?t=408874, sur les coordonnées d'un usercontrol, je souhaite maintenant que les coordonnées X & Y de celui-ci s'affiche sur ma form.
Comment procéder ?
Merci par avance
Quand j'ai ce genre d'infos à indiquer sur une Form, j'utilise un composant StatusBar (Microsoft Windows Common Controls 6.0) et j'affiche les informations dans différents Pannels qu'on peut y ajouter.
Pour avoir de l'aide sur ce composants, tu l'ajoute à ton projet, tu affiche l'explorateur d'objets (F2) et tu consulte la liste des propriétés, méthodes et événements qui sont à ta disposition. À partir de l'explorateur d'objets, tu as toujours accès à l'aide (F1).
Salut esoso et zazaraignée
Dans la declaration general de ton UserControl, ajouter l'evenement comme suit
toujours dans l'UserControl, procedure UserControl_MouseMove
Code : Sélectionner tout - Visualiser dans une fenêtre à part Event CeDeplace(Left As Integer, Top As Integer)
Sur ton Form, pour l'exemple affichage dans un Label
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Shift = vbCtrlMask And Button = 1 Then ' Ctrl et bouton gauche de la souris 'deplacement 'X et Y sont toujours en twips, quelque soit le ScaleMode du container NewMeCoord.Left = (NewMeCoord.Left + ScaleX(X, vbTwips, vbPixels)) - StartX NewMeCoord.Top = (NewMeCoord.Top + ScaleY(Y, vbTwips, vbPixels)) - StartY 'met a jour le UserControl MoveWindow UserControl.hwnd, _ NewMeCoord.Left, NewMeCoord.Top, _ NewMeCoord.Width, NewMeCoord.Height, 1 RaiseEvent CeDeplace(CInt(NewMeCoord.Left), CInt(NewMeCoord.Top)) End If End Sub
Il ya peut être plus simple, mais moi je ne c'est faire que comme sa
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub UserControl11_CeDeplace(Left As Integer, Top As Integer) Label2 = "left =" & CStr(Left) & " Top =" & CStr(Top) End Sub
A+
Motif de l'edit
En fait il faut que tu ajoutes RaiseEvent CeDeplace(CInt(NewMeCoord.Left), CInt(NewMeCoord.Top)), partout ou tu utilises
.............
'met a jour le UserControl
MoveWindow UserControl.hwnd
.......
A mettre donc dans les procedures UserControl_KeyDown, UserControl_MouseMove et UserControl_MouseUp
Re A+
ProgElecT: Je ne sais pas si esoso a programmé un événement MouseMove. Je crois qu'il déplace ses composant sur un événement clavier. Il n'a alors qu'à ajouter les deux lignes de code nécessaires pour afficher les coordonnées du contrôle dans la barre d'état ou ailleurs... c'est selon.
Merci pour vos réponses.
Si zazaraignée, il y a eu des modifications depuis et le déplacement se fait aussi à la souris..., donc en utilisant MouseMove.
ProgElecT, je teste ce soir ton code.
Bon alors, les coordonnées des contrôles sont en Twips et de type Single. Il se peut que Integer ne soit pas assez grand et provoque des erreurs.
Ok, merci pour ces précisions.
Salut
petites corrections
La declaration de l'evenement dans le code de l'user
Long a la place de Integerpour le declenchement dans les 3 procedures signalées, code de l'user
Code : Sélectionner tout - Visualiser dans une fenêtre à part Event CeDeplace(Left As Long, Top As Long)
qui remplace, RaiseEvent CeDeplace(NewMeCoord.Left, NewMeCoord.Top)et sa devient dans le Form
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 RaiseEvent CeDeplace(ScaleX(NewMeCoord.Left, 3, ContenerScaleMode), _ ScaleY(NewMeCoord.Top, 3, ContenerScaleMode))
Apres essais, ou que soit posé l'user, quel que soit le ScalMode du conteneur, les coordonnées seront maintenant renvoyées dans l'unité du ScalMode du conteneur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub UserControl12_CeDeplace(Left As Long, Top As Long) Label2 = "left =" & CStr(Left) & " Top =" & CStr(Top) End Sub
A+
Bonjour à tous,
Bonsoir ProgElect,
Je crois qu'il manque un événement
Mais dans le contexte expliqué, je crois que le plus simple c'est de mettre dans les événements qui gère le déplacement du UF, que ce soit par Key, ou mouseMove...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Dans le module de UF Dim StartX as single Dim StartY as single Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y as single) StartX = X StartY = Y End Sub
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TonLabel1.caption = NomUserForm.Top TonLabel2.caption = NomUserForm.Left
EDIT:
Une précision est indispensable..
Où se trouve la gestion des événement Key et Mouse ?
Salut LeForestier
Il faudra que je mette le source du UserControl un jour, car les bribes de code posées au fur et a mesure, ne permettent pas de comprendre.
Je te promet que sa fonctionne correctement.
Si esoso le permet, je ferai un Zip du source de l'user, que je mettrai a disposition, en attendant, voir eventuellement le lien donné par esoso, lors de son premier message, sa done des indications.
Bonsoir,
Bonsoir ProgElect,
Je veux bien te croire, mais alors que vient faire StarY et StartX qui ne sont initialisé nulle part dans ton code. Peut être qu'il sont inutile ?
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 'X et Y sont toujours en twips, quelque soit le ScaleMode du container NewMeCoord.Left = (NewMeCoord.Left + ScaleX(X, vbTwips, vbPixels)) - StartX NewMeCoord.Top = (NewMeCoord.Top + ScaleY(Y, vbTwips, vbPixels)) - StartY
Salut à tous et merci d'avoir répondu,
Désolé pour le retard de la réponse.
Je confirme ProgElecT pour dire que ce contrôle fonctionne impécable. ProgElecT, inutile d'avoir ma confirmation pour mettre le zip ... bien sûr.
Merci en tout cas pour les solutions apportées.
Salut
Donc je le met, chacun pourra se faire une idée du pourquoi des différentes interventions.Envoyé par esoso
Pour moi se n'etait qu'un outil d'apprentissage, si il a été utile a esoso, tant mieux.
Motif de l'edit
Pour faire un peu de place sur DVP, nettoyage, je suprime le ZIP, si cela interesse un jour quelqu'un, il pourra toujours me le demandé.
Ce qui a été le cas .
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager