VOila c remplacé dans le .zip. Merci de ton aide, g toujours eu un peu de mal avec les collections mais ca s'arrange lol. Si t'as d'autres commentaires ou autre je suis ouvert à toute recomandation :-)
Très rigolo cet effet et code simple.
Ce que je pourrais te proposer : Permettre de saisir un texte de longueur quelconque :
-1- Remplace ton Tableau à deux dimensions par un type d'item personnel, une collection. Et définir la dernière position connue de la souris dans une variable (plutôt que des Labels) :
En ne mettant qu'une seule dimension à Position, ça te permet d'utiliser les tableaux dynamiquement.
Public Type PositionType
X As Long
Y As Long
End Type
Public Position() As PositionType
Public PositionSouris As PositionType
-2- Pour les labels que tu utilises, c'est pareil :
Ne laisse qu'un seul Label1, avec l'index 0 (supprime les 9 autres)
Supprime aussi Label2 et Label3 qui ne serviront plus.
-3- Fais le transfert du texte vers les Label1 uniquement si le texte change : Dans l'evènement Text1_Change :
Dim LongTexte As Integer, r As Integer
LongTexte = Len(Text1.Text)
' Faut redimensionner le tableau
ReDim Position(LongTexte)
' Et aussi avec les Label1
' S'il n'y a pas suffisemment de Label1 chargés
' on en charge d'autres (de 0 à LongTexte-1)
If Label1.Count < LongTexte Then
For r = Label1.Count To LongTexte - 1
Load Label1(r)
Label1(r).Visible = True
Next r
End If
' Transfère le texte vers les Labels
For r = 1 To LongTexte
Label1(r - 1).Caption = Mid(Text1.Text, r, 1)
Next r
-5- Dans Form_MouseMove, remplace tes anciens Labels par notre nouvelle variable PositionSouris :
PositionSouris.X = X
PositionSouris.Y = Y
-6- Ensuite dans Timer1_Timer, tu n'as plus qu'à gérer les déplacements :
Dim r As Integer
On Error Resume Next
' On va décaler les mémoires des dernières positions
' (on ne s'occupe pas des .X ni .Y)
For r = (Label1.Count - 1) To 0 Step -1
Position(r + 1) = Position(r)
Next
Position(0) = PositionSouris
' Ensuite, on replace les labels décalés
For r = 0 To (Label1.Count - 1)
Label1(r).Left = Position(r).X + 150 * r
Label1(r).Top = Position(r).Y - 100
Next r
Ca m'a bien amusé ton truc. J'avais déjà vu ça en java, mais jamais en VB.
Vala
Jack
17 janv. 2004 à 21:26
a+
4 janv. 2004 à 03:03
Allez @+++ ;-)
Obi
4 janv. 2004 à 01:40
Très rigolo cet effet et code simple.
Ce que je pourrais te proposer : Permettre de saisir un texte de longueur quelconque :
-1- Remplace ton Tableau à deux dimensions par un type d'item personnel, une collection. Et définir la dernière position connue de la souris dans une variable (plutôt que des Labels) :
En ne mettant qu'une seule dimension à Position, ça te permet d'utiliser les tableaux dynamiquement.
Public Type PositionType
X As Long
Y As Long
End Type
Public Position() As PositionType
Public PositionSouris As PositionType
-2- Pour les labels que tu utilises, c'est pareil :
Ne laisse qu'un seul Label1, avec l'index 0 (supprime les 9 autres)
Supprime aussi Label2 et Label3 qui ne serviront plus.
-3- Fais le transfert du texte vers les Label1 uniquement si le texte change : Dans l'evènement Text1_Change :
Dim LongTexte As Integer, r As Integer
LongTexte = Len(Text1.Text)
' Faut redimensionner le tableau
ReDim Position(LongTexte)
' Et aussi avec les Label1
' S'il n'y a pas suffisemment de Label1 chargés
' on en charge d'autres (de 0 à LongTexte-1)
If Label1.Count < LongTexte Then
For r = Label1.Count To LongTexte - 1
Load Label1(r)
Label1(r).Visible = True
Next r
End If
' Transfère le texte vers les Labels
For r = 1 To LongTexte
Label1(r - 1).Caption = Mid(Text1.Text, r, 1)
Next r
-4- Dans le Form_Load, initialise les variables :
PositionSouris.X = 0
PositionSouris.Y = 0
Call Text1_Change
-5- Dans Form_MouseMove, remplace tes anciens Labels par notre nouvelle variable PositionSouris :
PositionSouris.X = X
PositionSouris.Y = Y
-6- Ensuite dans Timer1_Timer, tu n'as plus qu'à gérer les déplacements :
Dim r As Integer
On Error Resume Next
' On va décaler les mémoires des dernières positions
' (on ne s'occupe pas des .X ni .Y)
For r = (Label1.Count - 1) To 0 Step -1
Position(r + 1) = Position(r)
Next
Position(0) = PositionSouris
' Ensuite, on replace les labels décalés
For r = 0 To (Label1.Count - 1)
Label1(r).Left = Position(r).X + 150 * r
Label1(r).Top = Position(r).Y - 100
Next r
Ca m'a bien amusé ton truc. J'avais déjà vu ça en java, mais jamais en VB.
Vala
Jack
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.