équivalent de Inkey$ de qbasic en visual basic [Résolu]

plhea 45 Messages postés dimanche 13 mars 2005Date d'inscription 19 mars 2006 Dernière intervention - 13 mars 2005 à 20:43 - Dernière réponse : plhea 45 Messages postés dimanche 13 mars 2005Date d'inscription 19 mars 2006 Dernière intervention
- 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.
Afficher la suite 

6 réponses

Neo.balastik 797 Messages postés jeudi 17 mai 2001Date d'inscription 5 mai 2009 Dernière intervention - 14 mars 2005 à 14:11
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
adess00 263 Messages postés vendredi 4 mars 2005Date d'inscription 27 septembre 2008 Dernière intervention - 13 mars 2005 à 23:35
0
Utile
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+
econs 4066 Messages postés mardi 13 mai 2003Date d'inscription 23 décembre 2008 Dernière intervention - 14 mars 2005 à 09:43
0
Utile
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.
plhea 45 Messages postés dimanche 13 mars 2005Date d'inscription 19 mars 2006 Dernière intervention - 14 mars 2005 à 19:49
0
Utile
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.
Neo.balastik 797 Messages postés jeudi 17 mai 2001Date d'inscription 5 mai 2009 Dernière intervention - 15 mars 2005 à 09:00
0
Utile
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
plhea 45 Messages postés dimanche 13 mars 2005Date d'inscription 19 mars 2006 Dernière intervention - 29 mars 2005 à 19:07
0
Utile
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

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.