interuption de traitement dans une boucle ... [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 12-02-2003 à 15:13:59
en vb, ca m'arrive d'utiliser dans des boucles for :exit for
for i = 0 to XX
if condition then
exit for
end if
next
je pense que ca doit exister avec le do until
edit : Exit Do ca marche aussi
Marsh Posté le 12-02-2003 à 15:15:22
Déjà, vire ton until, beurk.
public test as boolean |
Marsh Posté le 12-02-2003 à 15:23:11
En utilisant une API windows, qui détecte les touches. Pour le coup tu n'as pas le choix. Dés que cette API va détecter la valeur taper tu va affeter "1" à une variable que l'on va apeller "b". Donc b = 1 dés que la touche espace est tapé.
Ensuite tu incorpore dans la boucle, la variable b. Toutefois fais attention à ce que le traitement de ton API soit dans la boucle et pas allieur, sinon ca ne fonctionnera pas...c''est assez compliqué à faire..
tu trouveras sur ce liens l'API donc je te parle :
http://docvb.free.fr/api.php
Marsh Posté le 12-02-2003 à 15:26:05
Xgirouette a écrit : en vb, ca m'arrive d'utiliser dans des boucles for :exit for |
c'est pas le boucle for, next qu'il utilise mais
Code :
|
on ne peut pas en sortir comme en veux de ses choses là, c'est justement pour ca que son truc est assez compliqué et fais apels à des connaissances. Des connaisssances sur les API windows, et sur le traitement des clavier. Car pour sortir d'une chose pareil,il faut respecter la condition de départ. Il faudra donc qu'il incorpore cette détection dans la boucle...je lui souhate du bonheur, il a pas fini...
Marsh Posté le 12-02-2003 à 15:29:06
MagicBuzz a écrit : Déjà, vire ton until, beurk.
|
oui c'est cela que je veux
mais form_onkeypress() existe sous VBA d'access 97 ?
Marsh Posté le 12-02-2003 à 15:29:38
Hepil a écrit : |
oui !
Marsh Posté le 12-02-2003 à 15:30:18
Xgirouette a écrit : en vb, ca m'arrive d'utiliser dans des boucles for :exit for |
interrrompre (=PAUSE) ne veut pas dire arrêter (=STOP) le traitement
Marsh Posté le 12-02-2003 à 15:58:38
il y a un blême là
mon appli est lancée par un formulaire
ensuite le code est dans un module
ce code est un ensemble de boucle dont je veux interrompre le traitement de tps à autre
si je mets DoEvents dans la boucle dont je veux interrompre le traitement, il faut qu'une procédure prenne la main à ce moment là
celle-ci serait intitulée "MaForm_OnkeyPress()" ?
il faut logiquement placer cette procédure dans le code du formulaire et non dans le module !
d'où le problème !
En interrompant la boucle dans le module (Mod1), va t-on rentrer dans la procédure qui est dans le formulaire ?
Marsh Posté le 12-02-2003 à 16:03:25
Hepil a écrit : il y a un blême là |
Doevents c'est pour laisser le temps au système, de terminer l'action qu'il à commencé, ce n'est en rien un arrêt ou une sorti de ta boucle.
Effectivement aprés doevents tu peux mettre non pas une procédure mais une fonction. Cette fonction te renverra 0 ou 1, si la touche espace est utilisé. Dans ce cas, las tu arrêtes ton programme.
Marsh Posté le 12-02-2003 à 16:12:44
Plus exactement, VB est mono-process et mono-thread.
Donc quand tu es dans une boucle seul le code s'éxécute, tu ne peux plus rien faire. La preuve, la fenêtre freeze.
doevents est une instruction qui met en pause quelques instants le programme afin de contrôler qu'aucun autre thread n'à de traîtement à faire, notamment la gestion des évènements.
Donc toujours mettre des doevents dans les longues boucles principalement, afin de pouvoir trapper les actions utilisateur.
Quand tu utilises Winsock dans un programme VB, tu passes ton temps à mettre des doevents partout afin de ne pas perdre de trames sur le réseau. C'est le mot clé magique.
Il est très peu consomateur en ressources, n'hésite donc pas à le mettre dans une boucle.
Marsh Posté le 12-02-2003 à 16:14:44
cvb > non, faut vraiment utiliser les évènements VB. Ca avec ton système, si l'utilisateur ne fait que frapper la touche, et que "doevents" ne se déclenche pas à ce moment, jamais tu ne va rien détecter.
keypress permet de récupérer un évènement même plusieurs secondes après qu'il se soit produit (par contre, si l'utilisateur appuie sur une autre touche en attendant, on perd la touche anciennement appuyée, mais c'est déjà ça)
Marsh Posté le 14-02-2003 à 09:53:54
suite du blême :
quand je sorts de la boucle, je peux me retrouver dans l'une ou l'autre des listeBox activées consécutivement dans mon application
dois-je gérer "l'interruption" par une touche pour chacune des listeBox par le code_évenementiel s'y rapportant ou y a t-il une autre solution plus mieux ?
l'évènement OnKeyPress
Marsh Posté le 12-02-2003 à 15:09:39
dans une boucle "Do until ..." par exemple,
je souhaite interrompre le traitent si j'appuis sur la touche espace ...
comment faire ?