Forum Liberty Basic France

Le 23/10/2018 à 17h38

Libertynaute Débutant

Groupe: Membre

Inscrit le: 22/09/2015
Messages: 20
Encore bonjour !

Comment peut-on déceler en temps réel une frappe dans une fenêtre texte ?

Plus clairement :
- On demande d'entrer une donnée dans une fenêtre texte.
- Tant que cette fenêtre ne contient rien, un bouton "OK" est désactivé, pour qu'on ne puisse pas traiter une donnée vide.
- Sitôt qu'il y a un caractère entré, le bouton "OK" s'active. On peut évidemment encore entrer d'autres caractères dans la fenêtre.

J'espère que c'est clair. Si non, je vous envoie un exemple.

J'ai essayé avec "when caracterInput", avec Inkey$, avec "!contents?" appliqués à la fene^tre principale et à la fene^tre texte, rien n'y fait : on dirait que "scan" ou "wait" ne perçoivent pas la frappe d'un caractère dans cette fenêtre.

Merci d'éclairer ma lanterne (sourde !).

1180michel

   
Le 23/10/2018 à 19h45

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2093
Pour détecter les actions clavier il faut ouvrir une graphicbox (qui peut être blanche)
Avec le mot clé "inkey$" tu récupère le caractère entré (qui sera dans inkey$).
Le problème (qui est d'ailleurs le même que pour les textbox), c'est que la machine ne peut pas savoir quand le message est entier (en clair: Quand tu décide d'arrêter d'écrire)
Pour les textbox, tu peux faire ça: (mais tant qu'il n'y a rien dans le textbox le programme est bloqué il tourne dans la boucle; et donc, la boucle il faut la mettre où il faut en fonction de ce que tu veux)
Code VB :
 
    #w.ok, "!disable" ' désactive le bouton en début de code
    while var$=""
     #w.letextbox "!contents? var$"  'lecture du contenu du textbox
     wend
     #w.ok, "!enable" 'active le bouton
     wait
    '-----

Pour être plus précis, il faudrait connaître le contexte
____________________
Roro

   
Le 24/10/2018 à 13h57

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2093
Suite:
Ce qui est plus facile et plus cohérent, c'est de mettre un test à l'appui du bouton, avec éventuellement une notice.
Code VB :
 
[ok]   'appui du bouton
#w.letextbox "!contents? var$"
if var$="" then notice,"Pas de donnée entrée !": wait
'...suite du prog...

Note que le wait doit être dans le test pour être sauté si textbox non vide
____________________
Roro

   
Le 24/10/2018 à 14h13

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2093
Re suite:
Tu peux aussi faire clignoter dans le textbox pour signaler qu'il attend une entrée
Code VB :
 
  [ok]
    #w.letextbox, "!contents? var$"
    if var$="" then
      for j=1 to 4   'pour clignoter 4 fois
        #w.letextbox, "Entrer donnée ! crogneugneu !"
        gosub [pause]
        #w.letextbox, "" 's'arrête sur textbox vide
        gosub [pause]
      next j
    end if
 wait
 '...suite du prog...
    [pause] 'bloc à mettre où tu veux puisqu'indépendant
        timer 400, [temps]   'pause en millisecondes
        wait
        [temps]
        timer 0
  return
 
____________________
Roro

   
Le 25/10/2018 à 11h33

Libertynaute Débutant

Groupe: Membre

Inscrit le: 22/09/2015
Messages: 20
Merci pour ces solutions, j'avais essayé avec "!contents? var$" et ça n'avait pas voulu marcher, peut-être y avait-il un os ailleurs. En tous cas, maintenant, c'est OK.

Bonne journée !

   

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie