Frappe clavier

4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant

version 6.0


Frappe clavier Alpha

ParamètreTypeDescription
Cette commande ne requiert pas de paramètre
RésultatAlphaCaractè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 ascii (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 ascii(Frappe clavier)=Touche gauche )
      : (Code ascii(Frappe clavier)=Touche droite )
      : (Code ascii(Frappe clavier)=Touche haut )
      : (Code ascii(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 LIGNES(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 mode Utilisation :

A l'aide des possibilités de communication interprocess de 4e Dimension, 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.


4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant