Taper à l’avance, c’est facile

Traduit automatiquement de Deepl

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 » :

blank

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).

blank

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 !

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.