version 6.0
Frappe clavier Alpha
Paramètre | Type | Description | ||||
Cette commande ne requiert pas de paramètre | ||||||
Résultat | Alpha | Caractère saisi par l'utilisateur |
Description
Frappe clavier retourne le caractère tapé par l'utilisateur dans un champ ou une zone saisissable.
En général, vous appelez Frappe clavier dans une méthode formulaire ou objet, lors de la gestion des événements formulaire Sur avant frappe clavier et Sur après frappe clavier. Pour détecter les événements de frappe clavier, utilisez la commande Evenement formulaire.
Si vous voulez remplacer un caractère saisi par l'utilisateur par un autre, utilisez la commande FILTRER FRAPPE CLAVIER.
IMPORTANT : Si vous voulez effectuer des opérations "à la volée" en fonction de la valeur courante de la zone saisissable en cours de modification ainsi que du caractère à saisir, rappelez-vous que le texte affiché à l'écran n'est pas encore la valeur du champ ou de la variable. La valeur saisie dans une variable ou un champ ne lui est affectée que lorsque la zone est validée (si l'utilisateur appuie sur la touche Tabulation, clique sur un bouton, etc.). En conséquence, pensez à placer les valeurs saisies dans une variable temporaire et à travailler avec celle-ci, ou utilisez la commande Lire texte edite. Vous devez procéder ainsi si vous souhaitez connaître la valeur courante du texte pour effectuer des actions spéciales.
Vous pouvez utiliser la commande Frappe clavier pour :
effectuer un filtrage personnalisé des caractères
créer un filtre de saisie non disponible en standard, par exemple dans les filtres de saisie
implémenter des zones de recherche ou de pré-saisie dynamiques.
Note : Vous ne pouvez pas utiliser la fonction Frappe clavier dans les sous-formulaires.
Exemples
(1) Référez-vous aux exemples de la commande FILTRER FRAPPE CLAVIER.
(2) Lorsque vous traitez un événement Sur avant frappe clavier, vous gérez la modification de la zone de texte courante (celle qui contient le curseur), et non la "valeur future" de la source de données (champ ou variable) de cette zone. La méthode Gérer frappe clavier décrite ci-dessous vous permet de placer dans une seconde variable les caractères saisis dans une zone de texte. Vous pouvez alors utiliser cette variable pour effectuer différentes actions pendant la saisie des caractères dans la zone. Vous passez comme premier paramètre un pointeur vers la source des données de la zone, et comme second paramètre un pointeur vers cette seconde variable. La méthode renvoie la nouvelle valeur de la zone de texte dans la seconde variable et retourne Vrai si cette valeur est différente de ce qu'elle était avant la saisie du dernier caractère.
` Méthode projet Gérer frappe clavier ` Gérer frappe clavier ( Pointeur ; Pointeur ) -> Booléen ` Gérer frappe clavier ( -> zoneSource ; -> valeurCourante ) -> Est-ce une nouvelle valeur C_POINTEUR ($1;$2) C_TEXTE ($vtNouvValeur) ` Récupérer le texte sélectionné dans la zone saisissable TEXTE SELECTIONNE ($1->;$vlDébut;$vlFin) ` Commencer à travailler avec la valeur courante $vtNouvValeur:=$2-> ` Selon la touche appuyée ou le caractère saisi, effectuer les actions appropriées Au cas ou ` La touche Retour arrière a été enfoncée : (Code de caractere(Frappe clavier)=Touche Retour arrière ) ` Supprimer les caractères sélectionnés ou le caractère à gauche du curseur $vtNouvValeur:=Sous chaine ($vtNouvValeur;1;$vlDébut-1-Num($vlDébut=$vlFin)) +Sous chaine($vtNouvValeur;$vlFin) ` Un caractère acceptable a été saisi : (Position (Frappe clavier;"abcdefghjiklmnopqrstuvwxyz -0123456789")>0) Si ($vlDébut#$vlFin) ` Un ou plusieurs caractères sont sélectionnés, la frappe clavier va les effacer $vtNouvValeur:=Sous chaine($vtNouvValeur;1;$vlDébut-1) +Frappe clavier+Sous chaine($vtNouvValeur;$vlFin) Sinon ` La sélection de texte est le curseur Au cas ou ` Le curseur est actuellement au début du texte : ($vlDébut<=1) ` Insertion du caractère au début du texte $vtNouvValeur:=Frappe clavier+$vtNouvValeur ` Le curseur est actuellement à la fin du texte : ($vlDébut>=Longueur($vtNouvValeur)) ` Ajouter le caractère à la fin du texte $vtNouvValeur:=$vtNouvValeur+Frappe clavier Sinon ` Le curseur se trouve dans le texte, insérer le nouveau caractère $vtNouvValeur:=Sous chaine($vtNouvValeur;1;$vlDébut-1)+Frappe clavier +Sous chaine($vtNouvValeur;$vlDébut) Fin de cas Fin de si ` Une touche flèche a été enfoncée ` Ne rien faire, mais valider la frappe clavier : (Code de caractere(Frappe clavier)=Touche gauche ) : (Code de caractere(Frappe clavier)=Touche droite ) : (Code de caractere(Frappe clavier)=Touche haut ) : (Code de caractere(Frappe clavier)=Touche bas ) ` Sinon ` Il ne faut pas accepter des caractères autres que des lettres, chiffres, espaces et tirets FILTRER FRAPPE CLAVIER ("") Fin de cas ` Est-ce que la valeur est maintenant différente ? $0:=($vtNouvValeur#$2->) ` Retourner la valeur pour la gestion de la prochaine frappe clavier $2->:=$vtNouvValeur
Une fois que vous avez ajouté cette méthode projet à votre application, vous pouvez l'utiliser ainsi :
` Méthode objet de la zone saisissable MonObjet Au cas ou : (Evenement formulaire=Sur chargement) MonObjet:="" MonObjetCaché:="" : (Evenement formulaire=Sur avant frappe clavier) Si (Gérer frappe clavier (->MonObjet;->MonObjetCaché)) ` Effectuer des actions appropriées par rapport à la valeur stockée dans MonObjetCaché Fin de si Fin de cas
Examinons par exemple le formulaire suivant :
Il est composé des objets suivants : une zone saisissable vaRecherche, une zone non-saisissable vaMessage et une zone de défilement taRecherche. Lorsque l'utilisateur saisit des caractères dans vaRecherche, la méthode objet effectue une recherche sur la table [Codes postaux] permettant d'afficher des villes américaines en saisissant seulement les premiers caractères de leur nom. Voici la méthode objet de vaRecherche :
` Méthode objet de la zone saisissable vaRecherche Au cas ou : (Evenement formulaire=Sur chargement ) vaRecherche:="" vaRésultat:="" vaMessage:="Saisissez les premiers caractères de la ville que vous cherchez." EFFACER VARIABLE(taRecherche) : (Evenement formulaire=Sur avant frappe clavier ) Si (Gérer frappe clavier (->vaRecherche;->vaRésultat)) Si (vaRésultat#"") CHERCHER([Codes postaux];[Codes postaux]Ville=vaRésultat+"@") SUPPRIMER MESSAGES VALEURS DISTINCTES([Codes postaux]Ville;taRecherche) LAISSER MESSAGES $vlRésultat:=Taille tableau(taRecherche) Au cas ou : ($vlRésultat=0) vaMessage:="Aucune ville trouvée." : ($vlRésultat=1) vaMessage:="Une ville trouvée." Sinon vaMessage:=Chaine($vlRésultat)+" villes trouvées." Fin de cas Sinon SUPPRIMER DANS TABLEAU(taRecherche;1;Taille tableau(taRecherche)) vaMessage:="Saisissez les premières lettres de la ville que vous cherchez." Fin de si Fin de si Fin de cas
Voici le formulaire en exécution :
A l'aide des possibilités de communication interprocess de 4D, vous pouvez construire une interface dans laquelle les recherches se construisent dans des palettes flottantes communiquant avec les process dans lesquels les enregistrements sont affichés ou modifiés.
Référence
Evenement formulaire, FILTRER FRAPPE CLAVIER, Lire texte edite.