plhea
Messages postés45Date d'inscriptiondimanche 13 mars 2005StatutMembreDernière intervention19 mars 2006
-
13 mars 2005 à 20:43
plhea
Messages postés45Date d'inscriptiondimanche 13 mars 2005StatutMembreDernière intervention19 mars 2006
-
29 mars 2005 à 19:07
Salut,
Je ne trouve pas l'équivalent de Inkey$ de qbasic en visual basic.
Je veux sortir d'un boucle comme celle ci qui marche en qbasic:
Do
i = i + 1
Loop While Inkey$ = ""
Si vous avez un autre moyen equivalent repondez moi.
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 14 mars 2005 à 14:11
Salut ;O)
Qbasic était purement linéaire, donc c'était au programmeur à gérer les boucles d'attentes. Dans ton cas le Inkey$ dans une boucle attendait d'être remplit par le buffer clavier.
VB6 est, au contraire de Qbasic, événementiel. On ne le programme donc plus linéairement mais par succession d'événements. C'est propre à Windows. C'est une charge de travail très réduite pour le programmeur, mais c'est très déroutant pour celui qui n'a jamais approché cette méthode.
Une bonne compréhension de l'événementiel est donc capital pour programmer VB6.
On pourrait retranscrire ton exemple en VB6 mais ce serait vraiment contraire à la philosophie actuelle de programmation.
Exemple (parmi d'autres) d'attente d'événement clavier ou souris (utilisation de l'API GetInputState ):
Private Declare Function GetInputState Lib "user32" () As Long
Private Sub Command1_Click()
Dim lngRetVal As Long
'On boucle jusqu'à ce que lngRetVal soit différent de zéro
Do
'vérifie l'état de clavier et souris dans la queue des messages
'lngRetVal aura une valeur <> de 0 en cas d'événement
lngRetVal = GetInputState
Loop Until lngRetVal
End Sub
Cet exemple est sorti de son contexte. Mais il est possible de reproduire un événement similaire à celui que tu demandais.
Mais un conseil, documente-toi sur l'événementiel car QBasic ne peut être retranscrit tel quel vu qu'il est linéaire.
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 15 mars 2005 à 09:00
plhea > ravi que cela réponde à ton besoin. Mais je persiste à dire que cette méthode n'est pas appropriée à l'événementiel, mais bon, ça c'est ton problème ;O)
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 14 mars 2005 à 09:43
En QBasic, tu attendais jusqu'à ce que l'utilisateur appuie sur une touche.
En VB, tu programmes tes contrôles pour répondre en cas de pression d'une touche. L'approche est différente.
Dans l'exemple de adess00, tu fais quelque chose si l'utilisateur appuie sur une touche quand le contrôle nommé Text1 reçoit l'appui d'une touche.
Avec le code qui suit, tu récupères les touches tapées quand le contrôle Form1 a le focus.
==========================
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox Chr(KeyCode)
End Sub
Private Sub Form_Load()
Form1.KeyPreview = True
End Sub
==========================
Si tu rajoutes des boutons sur ta feuille, le formulaire nommé Form1
perdra le focus, et il faudra créer le même genre de procédures pour
capturer l'appui des touches depuis chaque contrôle.
Manu -------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
Vous n’avez pas trouvé la réponse que vous recherchez ?