SuperPit37
Messages postés61Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention13 novembre 2005
-
22 juin 2005 à 22:54
SuperPit37
Messages postés61Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention13 novembre 2005
-
24 juin 2005 à 23:43
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
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 24 juin 2005 à 23:15
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...
SuperPit37
Messages postés61Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention13 novembre 2005 23 juin 2005 à 16:21
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
SuperPit37
Messages postés61Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention13 novembre 2005 23 juin 2005 à 21:27
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?
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 24 juin 2005 à 01:30
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!)
SuperPit37
Messages postés61Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention13 novembre 2005 24 juin 2005 à 22:24
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)
SuperPit37
Messages postés61Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention13 novembre 2005 24 juin 2005 à 23:43
"/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