Si vous vous intéressez à l’interface utilisateur, vous avez peut-être déjà utilisé les événements On before keystroke et On after keystroke. Vous serez certainement heureux d’apprendre que la gestion de ces événements a été grandement améliorée avec 4D v18 R5. En outre, une nouvelle commande a été créée pour déterminer si une entrée est en cours lorsque l’événement On before keystroke est généré. Nous allons en savoir plus !
HDI : la saisie en amont simplifiée
entrées de texte
Lorsque vous saisissez du texte, le système peut intervenir pour vous aider, quelle que soit la langue ou le système d’exploitation. Par exemple, prenons le cas des caractères accentués en français ou en espagnol : « ê » « ü » « ñ ». Pour saisir ces caractères dans macOS, le plus simple est de maintenir la touche correspondante enfoncée, ce qui fait apparaître une boîte de dialogue :
Pour sélectionner la lettre souhaitée, il faut utiliser les touches fléchées, puis valider son choix avec la touche « retour » ou « entrée » :
A partir de 4D v18 R5, les événements On before keystroke et On after keystroke ne sont générés que lorsque ce type de dialogue système (aka IME) est validé. Il n’est pas nécessaire de recevoir les codes correspondant aux touches fléchées et à la touche de validation lorsque seule la dernière lettre est importante !
boîtes de liste
Les boîtes de liste ont également été améliorées. L’événement On before keystroke est généré dès que la boîte de liste a le focus lorsqu’une touche est tapée, même si aucune cellule n’est en cours de saisie. Cela nous permet de savoir quelles touches ont été pressées et rend possible la prise de décisions programmatiques telles que le lancement d’une nouvelle recherche ou la modification de la sélection en cours !
MoRE INFO avec une nouvelle commande
Comment savoir si un événement a été généré lors d’une saisie réelle ou simplement parce que la boîte de liste avait le focus au moment où une touche a été pressée sur le clavier ? La réponse est très simple : la nouvelle commande Is editing text . Elle renvoie True si l’utilisateur est en train de saisir des valeurs dans un objet de formulaire de saisie, et False dans tous les autres cas.
Exemple de code
Cet exemple simple vous montre comment exécuter une requête dès qu’une lettre entre A et Z est tapée sur le clavier(tous les autres caractères sont ignorés dans cet exemple).
Bien entendu, la requête ne peut pas être effectuée pendant la modification d’une cellule. C’est pourquoi nous utilisons la nouvelle commande Is editing text avant d’effectuer toute nouvelle requête.
var $char : Text
Case of
:( FORM Event .code=On Before Keystroke)
If (Not(Is editing text)) // check not in input mode
$char :=Keystroke
Form.people:= ds .people.query("firstname = :1 or lastname = :1" ;$char+"@")
End if
End case
Un autre exemple ?
Le GIF animé suivant montre ce que l’on peut faire en utilisant cet événement dans une boîte de liste, sans l’aide d’aucun autre bouton ou zone de saisie(les lettres qui apparaissent sur le GIF animé ne sont affichées que pour montrer quelles touches ont été tapées sur le clavier).
Trouvez plus de détails sur cette commande dans le centre de documentation!
Conclusion
Cette fonctionnalité permet de créer une interface plus conviviale et nous sommes certains qu’en tant que développeur, vous l’utiliserez pour améliorer votre expérience utilisateur !
Pour plus d’informations, n’hésitez pas à consulter la documentation !