Déplacement un par un de controle fesan parti d'un groupe de controle [Résolu]

Signaler
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005
-
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005
-
Bon voila j'ai un groupe de 30 controle et voudrai savoir comment et t'il possible de les déplacer un par un sans avoir a reécrire le procedure a chaque foi ce qui donnerai un truc comme :

Dim Status, X_Initial, Y_Initial, Dist_Am


Private Sub Pion_MouseDown(Button As Integer, Index As Integer, Shift As Integer, x As Single, y As Single)
For i = 1 To 30
Status = 1
X_Initial = x
Y_Initial = y
Next
End Sub


Private Sub Pion_MouseMove(Button As Integer, Index As Integer, Shift As Integer, x As Single, y As Single)
For Index = 1 To 3
If Status = 1 Then
Pion(Index).Left = Pion(Index).Left + x - X_Initial
Pion(Index).Top = Pion(inedx).Top + y - Y_Initial
'control(index).left = control(index).left +/- ( x_initial +/- x )


End If
'SdData "P1", Winsock1
'DoEvents
'SdData "X" & Pion(index).Left, Winsock1
'DoEvents
'SdData "Y" & Pion(index).Top, Winsock1
'DoEvents
Next
End Sub
Private Sub Pion_MouseUp(Button As Integer, Index As Integer, Shift As Integer, x As Single, y As Single)
For Index = 1 To 30
Status = 0
Dist_Am = 100
If Pion(Index).Left < Dist_Am Then Pion(Index).Left = 0
If Pion(Index).Top < Dist_Am Then Pion(Index).Top = 0
Next
End SuB

Bien évidement ca ne marche pas alors si vous avez une idée elle sera la bienvenue

10 réponses

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Je comprends pas !!!

Tu veux pouvoir en déplacer qu'un seul en plus de pouvoir tous les déplacer en même temps !?!?!?!?

Ou alors simplement pouvoir tous les déplacer individuellement mais
jamais collectivement ??? (franchement, je sais pas si ça vient de moi,
mais t'es pas très clair!!!)



Si c'est bien ça ton problème, met ce code à la place :



Dim varAntiRecursif As Boolean 'Evite que les procédure se rappellent en cours...

Dim varDep As Boolean

Dim varDepX As Long

Dim varDepY As Long



Private Sub Form_Load()

'Convertie l'unité de mesure interne de la fenêtre en Pixels plutôt qu'en Twips!

Me.ScaleMode = vbPixels

End Sub



Private Sub Pion_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim varTour As Byte 'Limite à 256 controles "Pion" !!!



If Button <> 1 Then Exit Sub



'Position absolue de la souris sur le parent

'des pions (la fenêtre à priori!)

'Nota : X et Y renvoyé par les événements Mouse sont toujours exprimés en Twips

X = Me.Pion(Index).Left + (X / Screen.TwipsPerPixelX)

Y = Me.Pion(Index).Top + (Y / Screen.TwipsPerPixelY)



'Initialisation du décalage du Pion...

varDepX = Me.Pion(Index).Left - X

varDepY = Me.Pion(Index).Top - Y



'Active le mode "Déplacement" (Cf. procédure MouseMove)

varDep = True

End Sub



Private Sub Pion_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

'Déplacement



Static varOldX As Long

Static varOldY As Long



If varAntiRecursif = True Then Exit Sub 'Filtrage pour l'anti-récursif

varAntiRecursif = True 'Activation de l'anti-récursif



'Convertion des Twips en pixels... (Cf. MSDN, l'aide du VB !)

X = Me.Pion(Index).Left + (X / Screen.TwipsPerPixelX)

Y = Me.Pion(Index).Top + (Y / Screen.TwipsPerPixelY)



'Déplacement de chaque controle (Boutons pions)

If varDep = True Then

'Evite de faire clignoter si la souris ne bouge pas...

If X varOldX And Y varOldY Then varAntiRecursif = False: Exit Sub

Me.Pion(Index).Move X + varDepX, Y + varDepY

End If



varOldX = X

varOldY = Y



varAntiRecursif = False 'Désactivation de l'anti-récursif

'(a faire partout avant de sortir de la procédure!!!)



End Sub



Private Sub Pion_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

'Fin du déplacement

varDep = False

End Sub





Voilà, maintenant ça devrait faire ce que tu voulais si c'était bien ça que tu voulais !!!

Parce que franchement, rajouter 2 phrases à vos demandes vous
écorcherait tellement vos si précieux doights !?!?!? Que de temps
perdu...



Enjoy
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Messages postés
586
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
13 février 2008
2
salut je ne vois pas l'interet de la boucle for ds le premier sub.


<HR>

Life is short...Learn more
Copy Rights <> Rights to Copy
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Clair!

Tu codes en quoi, VB6, VB.NET, VBA, VBS ???



Précise un peu mieux ce qui te pose problème parce que c'est pas très clair !!!
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005

Je code en VB6
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005

Le pb c que je n'arrive pa a trouver le code qui permet de déplacer un seul controle a la fois soit sa séplace tout les controle en meme tps soit sa déplace tjrs le meme controle
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Je sais pas si tu nous a donné tout ton code mais il est complètement foutraque!!!



Regarde ceci et répond à mes quetions :



Dim Status

Dim X_Initial

Dim Y_Initial

Dim Dist_Am

Private Sub Pion_MouseDown(Button As Integer, Index As Integer, Shift As Integer, X As Single, Y As Single)

Status = 1

X_Initial = X

Y_Initial = Y

End Sub



Private Sub Pion_MouseMove(Button As Integer, Index As Integer, Shift As Integer, X As Single, Y As Single)


If Status = 1 Then


For Index = 1 To 3

'A mon avis, ta formule pose problème, l'as-tu vérifiées ???

Pion(Index).Left = Pion(Index).Left + X - X_Initial

Pion(Index).Top = Pion(inedx).Top + Y - Y_Initial

'control(index).left = control(index).left +/- ( x_initial +/- x )



'SdData "P1", Winsock1



'DoEvents



'SdData "X" & Pion(index).Left, Winsock1



'DoEvents



'SdData "Y" & Pion(index).Top, Winsock1

'DoEvents


Next
Index




End If

End Sub




Private Sub Pion_MouseUp(Button As Integer, Index As Integer, Shift As Integer, x As Single, y As Single)
Status = 0
'Tu cherches à faire quoi ici ???

' Dist_Am = 100


' For Index = 1 To 30
' If Pion(Index).Left < Dist_Am Then Pion(Index).Left = 0
' If Pion(Index).Top < Dist_Am Then Pion(Index).Top = 0
' Next Index

End SuB





Sinon, juste une autre question, tu ne nous as pas mis tout ton code là ???
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005

Bon ce code ne marche pa c un fait mai sion pourai tu me montrer un code ki permet de déplacer individuelement un controle ki fait partie d'un groupe de controle?
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Je dois avoué que j'ai dû mal à cerner ton problème !!! Tu n'es pas très clair je trouves!



C'est simple, un control qui fait parti d'un groupe a un index qui lui
est propre! Donc, il suffit de faire comme tu l'as fait c'est à dire un
truc du styl :

control(index).Left = xx


control(index).Top = yy



Donc, pour ton problème, voici un petit exemple pour faire déplacer
tous ensemble (mais pas simultanément!) des boutons nommées "Pion" :



'Nota : "Me" remplace le nom de la feuille quel qu'il soit!



Dim varAntiRecursif As Boolean 'Evite que les procédure se rappellent en cours...

Dim varDep As Boolean

Dim varDepX() As Long 'Tableau

Dim varDepY() As Long 'Tableau



Private Sub Form_Load()

'Convertie l'unité de mesure interne de la fenêtre en Pixels plutôt qu'en Twips!

Me.ScaleMode = vbPixels

End Sub



Private Sub Pion_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim varTour As Byte 'Limite à 256 controles "Pion" !!!



'Début du déplacement

'!!! ATTENTION !!! :

'fonctionne avec tous les boutons de la souris : Droite, Gauche et Milieu

'Sinon, marquer ceci pour ne le déclancher qu'avec le bouton gauche :

'If Button <> 1 Then Exit Sub



'Initialise les tableau

ReDim varDepX(Me.Pion.Count - 1)

ReDim varDepY(Me.Pion.Count - 1)



'Position absolue de la souris sur le parent

'des pions (la fenêtre à priori!

'Nota : X et Y renvoyé par les événements Mouse sont toujours exprimés en Twips

X = Me.Pion(Index).Left + (X / Screen.TwipsPerPixelX)

Y = Me.Pion(Index).Top + (Y / Screen.TwipsPerPixelY)



'Initialisation du décalage pour chaque Pion...

For varTour = 0 To (Me.Pion.Count - 1)

varDepX(varTour) = Me.Pion(varTour).Left - X

varDepY(varTour) = Me.Pion(varTour).Top - Y

Next varTour



'Active le mode "Déplacement" (Cf. procédure MouseMove)

varDep = True

End Sub



Private Sub Pion_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

'Déplacement



Static varOldX As Long

Static varOldY As Long



If varAntiRecursif = True Then Exit Sub 'Filtrage pour l'anti-récursif

varAntiRecursif = True 'Activation de l'anti-récursif



'Convertion des Twips en pixels... (Cf. MSDN, l'aide du VB !)

X = Me.Pion(Index).Left + (X / Screen.TwipsPerPixelX)

Y = Me.Pion(Index).Top + (Y / Screen.TwipsPerPixelY)



'Déplacement de chaque controle (Boutons pions)

If varDep = True Then


'Evite de faire clignoter si la souris ne bouge pas...


If X varOldX And Y varOldY Then varAntiRecursif = False: Exit Sub

For varTour = 0 To (Me.Pion.Count - 1)

'Me.Pion(varTour).Left = X - varDepX(varTour)

'Me.Pion(varTour).Top = Y - varDepY(varTour)

Me.Pion(varTour).Move X + varDepX(varTour), Y + varDepY(varTour)

Next varTour

End If



varOldX = X

varOldY = Y



varAntiRecursif = False 'Désactivation de l'anti-récursif

'(a faire partout avant de sortir de la procédure!!!)



End Sub



Private Sub Pion_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

'Fin du déplacement

varDep = False

End Sub




Tu as remarqué que le code est en bleu et les commentaires en vert bien sûr ;-)



Copie ce code et colle-le dans un nouveau projet avec 2 ou 4 bouton (nommées tous "Pion")...



Note que je l'ai testé chez et qu'il fonctionne très bien, alors si il
te pose problème, regarde si t'a pas fait un truc illégale! Note aussi
que je l'ai fait entre 2 téléchargements, vite fait et donc, peut-être
mal fait!!! C'est à dire qu'il est pas parfait, et que par conséquent,
il peut être amélioré, mais qu'il te montrera déjà les quelques erreurs
que tu as fais... (la principale ayant été de ne pas considérer tous
les controles comme étant bien dictincts malgré le fait qu'ils
appartiennent à la même collection...)



Mais attention aux Twips et aux Pixels... Beaucoup d'erreurs, du moins au début, viennent de là!



Bon, j'en dis pas plus pour te laisser regarder le code de plus près. Si tu as encore un problème, n'hésite pas



Et si t'en as plus, n'oublie pas de cliquer sur le bouton "Accepter"
pour signaler aux autres membres que ton problème à bien trouvé une
solution ! (c'est important ça!)



Enjoy
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005

Bon tout d'abord je te remerci d'avoir consacré du temps pour me répondre.

Le problème en fait c'est ke je n'arrive pas a déplacer un seul controle a la fois.
Dans ton code, par exemple tout les controle nommé pion se déplace en meme tps.
Il faudrai ke je puisse en déplacer un seul par exemple; sans avoir a réécrir la procedur pour chaque controle (sanchant qu'il font tous partie d'un meme groupe)
Messages postés
61
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
13 novembre 2005

"/auteurdetail.aspx?ID=481629 Bon ce code ne marche pa c un fait mai sion pourai tu me montrer un code ki permet de déplacer individuelement un controle ki fait partie d'un groupe de controle? "

Dsl je pensai que c'était clair c vrai que sa porte a confusion néamoin ce code répond tout a fait a ma question (j'avais finalement fini par réoudre le pb)

Dim Status, X_Initial, Y_Initial, Dist_Am


Private Sub Pion_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Status = 1
X_Initial = X
Y_Initial = Y
End Sub
Private Sub Pion_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Status = 1 Then
Pion(Index).Left = Pion(Index).Left + X - X_Initial
Pion(Index).Top = Pion(inedx).Top + Y - Y_Initial
End If
End Sub
Private Sub Pion_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Status = 0
Dist_Am = 100
If Pion(Index).Left < Dist_Am Then Pion(Index).Left = 0
If Pion(Index).Top < Dist_Am Then Pion(Index).Top = 0
End Sub

Mais je préfère largement ton code surtout kil elimine les dédoublement les tramblement ....

Bref un Grand MERCI

Ps si j'ai une prochaine question je prendrai bien le tps d'exposer mon pb promi