Déplacement par flèches

Signaler
Messages postés
4
Date d'inscription
lundi 21 août 2006
Statut
Membre
Dernière intervention
29 août 2006
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Bonjour,

J'ai fais une grille style mots croisé, les cases change de couleur aléatoirement afin d'avoir des cases noires, je voudrais lorsque je me déplace dans la grille avec les touches fléché, sauter d'une case a chaque fois que je rentre dans une case noire, voici mon code pour le déplacement vers la droite (99 car j'ai 100 cases) :
If KeyCode = vbKeyRight And Index < 99 Then objCase(Index + 1).SetFocus: Exit Sub

et voici le code pour éviter d'atterir sur une case noire par clic de souris dans la grille :If objCase(Index).BackColor <gras>RGB(0, 0, 0) Then If Index 99 Then objCase(Index - 1).SetFocus Else objCase(Index + 1).SetFocus: Exit Sub</gras>

Merci de m'aider, cela fonctionne quand je clique, ça passe sur l'objet suivant, mais je trouve pas comment lorsque je déplace le focus par les touches

Ragus

6 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,


Dans quels événements as tu placer ces codes
Je ne vois pas trop ou est ton  souci.








@+, Julien
Messages postés
4
Date d'inscription
lundi 21 août 2006
Statut
Membre
Dernière intervention
29 août 2006

En fait pour eviter que le curseur se positionne sur une case noire, le deuxième code fonctionne lorsque je clique sur une case noire.
Par contre lorsque je me déplace avec les touches fléchés je peut atterir sur une case noire, je voudrais l'éviter, le 1er code n'est qu'e le code de déplacement pour la touche droite, c'est là que je voudrais insérer une impossibilité d'atterir sur une case noire, mais je ne sais pas comment faire.
Voici le code entier pour les déplacements :

Private Sub objCase_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
'************* déplacement par les touches fléché ****************
If KeyCode = vbKeyRight And Index < 99 Then objCase(Index + 1).SetFocus: Exit Sub
If KeyCode = vbKeyLeft And Index > 1 Then objCase(Index - 1).SetFocus: Exit Sub
If KeyCode = vbKeyUp And Index > 11 Then objCase(Index - 10).SetFocus: Exit Sub
If KeyCode = vbKeyUp And Index < 11 Then objCase(Index + 90).SetFocus: Exit Sub
If KeyCode = vbKeyDown And Index < 90 Then objCase(Index + 10).SetFocus: Exit Sub
If KeyCode = vbKeyDown And Index > 90 Then objCase(Index - 90).SetFocus: Exit Sub
End Sub

Ragus
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,


Dans ce cas il faut que tu teste la couleur de la case avant de faire le SetFocus.


Du style
If KeyCode = vbKeyRight And Index < 99 AndobjCase(Index + 1).BackColor <> RGB(0, 0, 0) Then objCase(Index + 1).SetFocus: Exit Sub

Le seul truc c'est si c'est une case noire tu décide de faire quoi?






@+, Julien
Messages postés
4
Date d'inscription
lundi 21 août 2006
Statut
Membre
Dernière intervention
29 août 2006

Salut,


Merci, en fait ton code fonctionne, si c'est une case noire, le focus n'y accède pas, mais il faudrait qu'il <saute> par dessus cette case pour arriver sur la prochaine, mais si c'est aussi une case noire, ça fonctionnera pas, a moins de faire plein de test qui se suivent.
En fait je voudrais qu'elle passe a la case suivante jusqu'a arriver sur une blanche, j'y arrive pas






Ragus
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
tu t'y prends à l'envers.
il ne faut pas aller d'un en un jusqu'à tombee sur une libre puisque tu peux très bien ne pas en avoir (noire en bordure) mais calculer le prochain index dispo sur la ligne selon la direction puis t'y déplacer si cet index existe.

fonction récursive?
while?
au choix...

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir
En plus , avec :
If KeyCode = vbKeyRight And Index < 99 Then objCase(Index + 1).SetFocus: Exit Sub
Il quitte  toujours après le premier test
Il faut un End If pour qu' il passe au suivant si le test est Faux.