4D v16.3

Frappe clavier

Accueil

 
4D v16.3
Frappe clavier

Frappe clavier 


 

Frappe clavier -> Résultat 
Paramètre Type   Description
Résultat  Chaîne in Caractère saisi par l'utilisateur

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.

Référez-vous aux exemples de la commande FILTRER FRAPPE CLAVIER.

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.



Voir aussi  

Evenement formulaire
FILTRER FRAPPE CLAVIER
Lire texte edite

 
PROPRIÉTÉS 

Produit : 4D
Thème : Gestion de la saisie
Numéro : 390
Nom intl. : Keystroke

 
HISTORIQUE 

Créé : 4D v6

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)