équivalent de Inkey$ de qbasic en visual basic

Résolu
plhea Messages postés 45 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 19 mars 2006 - 13 mars 2005 à 20:43
plhea Messages postés 45 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 19 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.

6 réponses

Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
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.

Bonne chance.

Guy
3
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
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)

Guy
1
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
13 mars 2005 à 23:35
Je me souvient plus tres bien de qBasic je crois que inkeys c une entree au clavier
Voila si sa peut t aider

Private Sub Text1_KeyPress(KeyAscii As Integer)

'tu met l evenement que tu veux ici

End Sub

Si sa ne te convient pas donne plus de detailles sur ton code
a+
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
plhea Messages postés 45 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 19 mars 2006
14 mars 2005 à 19:49
ah voila c'est exactement ca.

Je n'avais pas pensé pas pensé à chercher dans les api mais ca convient exactement à ce que je voulais .
thanks Neobalastik.
0
plhea Messages postés 45 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 19 mars 2006
29 mars 2005 à 19:07
Euh sinon j'ai trouvé un autre moyen : on utilise DoEvents

private sub command1_click()
Do
i=i+1
DoEvents
Loop
end sub

private sub command1_keypress()

msgbox "fin de la boucle"

end sub

voila
si ca interresse qqun
0
Rejoignez-nous