Radiohead4ever
Messages postés71Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention21 novembre 2006
-
21 avril 2005 à 20:58
Radiohead4ever
Messages postés71Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention21 novembre 2006
-
21 avril 2005 à 23:59
Bonjour
Je me demande s'il est possible de faire attendre VB. Pour ma part, j'ai esseyé de "l'emprisoné" dans un Do Loop dont la seule issue serait que l'utilisateur ait appuyé sur la touche "e".
Dans KeyPress, j'ai dit a VB que lorsque la touche "e" (101 en ascii) est appuyé, de mettre la variable boolean "Etrigged" à true. La loop dont je parlais au début se trouve dans un autre sub que KeyPress et attend que Etrigged soit a true pour permettre de sortir du Do Loop.
Eh bien ça ne marche pas.. Y a t-il un bon moyen efficace que je puisse utilisé qui me permettera d'attendre que l'utilisateur appuis sur une touche avant de continuer a lire le code de ma sub ?
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 21 avril 2005 à 21:12
est-ce que tu as mis des DoEvents dans ta boucle ?
si tu fais rien d'autre que t'attendre la touche, c'est pas la peine de faire de boucle, tu arrêtes ton programme et tu lances la suite au moment où on tape sur la touche.
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 21 avril 2005 à 21:51
Come le dis Gobillot, rappelons a toutes fins utiles, que VB est évènementiel et non pas simplement procédural (ce qu'il est aussi d'ailleur, mais il es tpluls que cela !!) donc le fait de dire que Le programme va attendre que l'utilisateur appui sur une touche perd un peu de son sens en VB. Mais encore une fois tout dépend du contexte. En tout cas, voila une solution éventuelle à ton probleme
Sur une form avec un CommandButton commé Command1. On ajoute cela au code de la form .
Private ETrigged As Boolean
Private Sub Form_Load()
ETrigged = False
Command1.Caption = "Click Me !!!"
End Sub
Private Sub Command1_click()
Msgbox "Après avoir valider ce message, appuyer sur ""e"" pour terminer la boucle"
While not ETrigged
DoEvents
Wend
Msgbox "Boucle terminée"
End sub
Private Sub Form_KeyPress(KeyAscii As Integer) ETrigged (KeyAscii Asc("e") Or KeyAscii = Asc("E"))
End Sub
Radiohead4ever
Messages postés71Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention21 novembre 2006 21 avril 2005 à 22:10
Crenaud76: A tu testé ton code ? Si oui, il a un probleme avec mon system puisque je ne voit jamais le message qui confirme que je suis sorti du While. (je ne l'ai même pas ajouté a mon programme, j'ai fait un nouveau projet tout simple avec ton code et un bouton!) Je galère...
Casy: Voici le code de la sub
Private Sub ReadingMessage()
Dim Lettres As String 'Symbols de la ligne
Dim Progret As Integer 'à quel symbol la lecture est rendu (94 par lignes, 5 lignes)(taille de la boite)
Dim LastTime As Boolean
Dim Wait4E As Boolean
If Left(Lettres, 1) = "_" Then
Wait4E = True
GoTo StartingReadingMessage
End If
If Left(Lettres, 1) = "/" Then
LastTime = True
Wait4E = True
GoTo StartingReadingMessage
End If
Select Case Progret
Case 94
Messagelbl.Caption = Messagelbl.Caption & Left(Lettres, 1) & vbNewLine
Case 188
Messagelbl.Caption = Messagelbl.Caption & Left(Lettres, 1) & vbNewLine
Case 282
Messagelbl.Caption = Messagelbl.Caption & Left(Lettres, 1) & vbNewLine
Case 376
Messagelbl.Caption = Messagelbl.Caption & Left(Lettres, 1) & vbNewLine
Case Else
Messagelbl.Caption = Messagelbl.Caption & Left(Lettres, 1)
End Select
Case True
Do
Select Case messagefleche.Visible
Case True
messagefleche.Visible = False
Case False
messagefleche.Visible = True
End Select
If Etrigged = True Then
Select Case LastTime
Case False
GoTo StartingReadingMessage
Case True
MsgBox "lasttime = true"
GoTo Fin
End Select
End If
Loop
End Select
Timer1_Timer
Next Progret
Fin:
End Sub
Et voici une partie du code de Keypress
Select Case KeyAscii
Case 101 '*********** Bouton D'action (e)
Etrigged = True
Select Case MapoffsetY
Case 0
Select Case MapoffsetX
Case 0
Select Case PersoOffsetY
Case 3
Select Case PersoOffsetX
Case 1
Select Case PersoBoussole
Case 2
mov000000B5 = False
'Fin de PersoBoussole
End Select
'Fin de PersoOffsetX
End Select
'Fin de PersoOffsetY
End Select
'Fin de MapoffsetX
End Select
'Fin de MapoffsetY
End Select
InitMessage 'affiche le message correspondant si message il y a.
ApplyMoveables 'Reset toutes les Moveables, (vérifi s'il on encore raison d'etre affichés)
End Select
RadioHead4Ever
Vous n’avez pas trouvé la réponse que vous recherchez ?
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 21 avril 2005 à 22:18
J'ai effectivement oublié de précisier qu'il faut que la propriété KeyPreview de la Form soit à True. Sinon, c'ets le CommandButton qui à le focus alors c'est lui qui recevrait l'EVT KeyPress, et non pas la form. Avec cela, ca devrait tourner.
Et si tu veux que cela fonctionne X fois de suite, il faudra rajouter un ETrigged = False juste avant de rentrer dans le While ...
(Pour info, je n'ai pas tester ce code)
Radiohead4ever
Messages postés71Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention21 novembre 2006 21 avril 2005 à 22:40
Voilà, ca va mieux. Mais il y a encore un probleme. Avant tout je vais expliquer le contexte. Je suis en train de faire un jeu RPG et dans ce cas ci, je travail sur le sytème de messages. Lorsque je verrai un personnage et que j'appurai sur "e", ma sub ce déclenchera. Le principe est simple. Toute la conversation est stocké dans une variables String, évidement. Mais je ne la diffuse pas au complet, mais bout par bout. Voila pourquoi je voudrais je l'utilisateur appui sur "e", c'est pour quand il aura fini de lire une réplique, il verra appaitre le prochain bout de texte, et comme ca, jusqu'à la fin du String. Ensuite, je redonne le controle à l'utilisateur et il sera libre d'aller ou il veut.. C'est pas nouveau comme concept et vous avez probablement déja vu ca.
Mon probleme c'est que TOUT au long de ma sub, la touche "e" reste activée (semble-t-il) donc, la sub me fait apparaitre tres rapidement, toutes les réplique, comme si la touche e restait enfoncée..
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 avril 2005 à 22:53
HORREUR une attaque de GoTo
STP évite d'utiliser cette SALOPERIE de goto, c'est fini le temp de QuickBasic et de ses ancètres Basica et HPBasic.
GoTo n'est admis (parqu'on a pas le choix) que dans un cas : On Error GoTo
Sinon ça fait de belle m*r*e de boucles infinies, et j'ai l'impression que c'est ce que tu nous à fait.
Je vois que tu te shoote au Select Case aussi. Perso pour une ou
possibilité je prefère le If/Then/Else, je réserve le Select Case
lorsque + de 2 choix son possible.
Si j'ai bien compris ton code, tu ne peux rentrer en attente de la
touche 'e' que lorsque la variable Wait4E est à true, or les rares fois
ou elle est mise à true, elle est systèmatiquement remise à false par
ton GoTo StartingReadingMessage.
Donc en fait tu ne rentre jamais en attente de la touche 'e', c'est
pour cela que tu as l'impression qu'elle est toujours activée.
Je continu à analyser ton code qui n'est pas si simple que ça à comprendre.
Si le cerveau était assez simple pour que nous puissions le comprendre,
nous serions assez bête pour ne pas le comprendre malgré tout.
Radiohead4ever
Messages postés71Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention21 novembre 2006 21 avril 2005 à 23:34
Hahahaha, c'est vrai que j'aime bien les Select Case.. Je trouve ca plus clair. Mais je ne les utilise pas en vaint car ce que je fait en ce moment n'est que le "moteur" de mon jeu, et plus tard il y aura BEAUCOUP plus de possibilitées,, donc dans ce cas, les select case sont mieux, mais j'avou que des fois j'abuse..
Bon, j'ai testé et étudié ton code. Il est fonctionnel, mais seulement pour le premier bout de texte, apres, mon appli devient surper lente, rien ne fonctionne, je peux meme pas quitter, je dois faire ctrl alt del... Je n'ai aucune idée pourquoi, parce que franchement, ton code semble impect (meme pas de goto ). D'ailleurs, c'est pas la premiere fois que je vois ce genre de réaction de programme. C'est tu d'où ca vient?