FILTRER FRAPPE CLAVIER

4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

version 6.0


FILTRER FRAPPE CLAVIER (carFiltré)

ParamètreTypeDescription
carFiltréAlphaCaractère(s) de remplacement ou
Chaîne vide pour annuler le filtrage clavier

Description

FILTRER FRAPPE CLAVIER vous permet de remplacer le caractère saisi par l'utilisateur dans un champ ou une zone saisissable par le premier caractère de la chaîne carFiltré.

Si vous passez une chaîne vide, le filtrage clavier en cours est annulé.

Vous appelez généralement FILTRER FRAPPE CLAVIER dans une méthode formulaire ou objet lorsque vous gérez l'événement formulaire Sur avant frappe clavier. Pour détecter les événements de frappe clavier, utilisez la commande Evenement formulaire. Pour récupérer les caractères saisis au clavier, utilisez les fonctions Frappe clavier ou Lire texte edite.

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 (lorsque 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, puis à assigner cette variable à la zone de saisie (reportez-vous à l'exemple ci-dessous). Vous pouvez également utiliser la fonction Lire texte edite.

Utilisez la commande FILTRER FRAPPE CLAVIER dans les cas suivants :

Pour effectuer un filtrage personnalisé des caractères,

Pour créer un filtre de saisie non disponible en standard,

Pour implémenter des zones de recherche ou de pré-saisie dynamiques.

ATTENTION : si vous appelez la commande Frappe clavier après avoir appelé FILTRER FRAPPE CLAVIER, c'est le caractère passé à cette commande qui sera retourné et non le caractère réellement saisi.

Exemples

(1) Avec le code suivant :

      ` Méthode objet de la zone saisissable monObjet
   Au cas ou 
      : (Evenement formulaire=Sur chargement )
         monObjet:=""
      : (Evenement formulaire=Sur avant frappe clavier )
         Si(Position(Frappe clavier;"0123456789")>0)
            FILTRER FRAPPE CLAVIER("*")
         Fin de si
   Fin de cas

... tous les chiffres saisis dans la zone monObjet seront transformés en astérisques.

(2) Le code ci-dessous définit le comportement d'une zone de saisie de mot de passe, dans laquelle les caractères saisis sont remplacés à l'écran par des caractères aléatoires :

      ` Méthode objet de la zone saisissable vaMotsPasse
   Au cas ou 
      : (Evenement formulaire=Sur chargement)
         vaMotsPasse:=""
         vaMotPasseActuel:=""
      : (Evenement formulaire=Sur avant frappe clavier)
         Gérer frappe clavier (->vaMotsPasse;->vaMotPasseRéel)
         Si (Position(Frappe clavier;Caractere(Touche Retour arrière)+Caractere(Touche gauche )+
                                    Caractere(Touche droite )+Caractere(Touche haut )+
                                    Caractere(Touche bas ))=0)
            FILTRER FRAPPE CLAVIER(Caractere(65+(Hasard%26)))
         Fin de si 
   Fin de cas

Une fois la zone validée, vous récupérez le mot de passe réellement saisi par l'utilisateur dans la variable vaMotPasseRéel. La méthode Gérer frappe clavier est listée dans l'exemple de la commande Frappe clavier.

(3) Vous disposez dans votre application de diverses zones de texte dans lesquelles vous pouvez saisir quelques phrases. Votre application comporte également une table de glossaire contenant les termes les plus fréquemment utilisés dans votre base. Lors de l'édition de vos zones de texte, vous voulez pouvoir rapidement, à partir du glossaire, retrouver et insérer des mots en fonction des caractères sélectionnés dans le texte. Pour cela, vous avez deux solutions : soit placer des boutons avec des touches associées qui vont exécuter l'opération, soit intercepter les frappes clavier spéciales pendant la saisie. L'exemple ci-dessous utilise la seconde solution, basée sur la touche Aide.

Comme décrit ci-dessus, lorsque vous éditez une zone de texte, la valeur du champ ou de la variable de texte ne sera réellement modifiée que lorsque que vous l'aurez validée. Pour retrouver et insérer rapidement des entrées du glossaire dans une zone de texte alors qu'elle est en train d'être modifiée, vous devez donc créer une seconde zone "tampon" pour y placer les valeurs saisies. Vous pouvez effectuer cette opération à l'aide de la méthode projet décrite ci-dessous. Vous passez comme premiers paramètres des pointeurs vers la zone de saisie et vers la variable, puis la chaîne de caractère "interdits" comme troisième paramètre. Peu importe comment l'entrée clavier sera traitée, la méthode retourne la valeur saisie originale. Les caractères "interdits" sont les caractères que vous ne voulez pas insérer dans la zone saisissable et que vous voulez traiter en tant que caractères spéciaux.

      ` Méthode projet Frappe clavier tampon
      ` Frappe clavier tampon ( Pointeur ; Pointeur ; Alpha ) -> Alpha
      ` Frappe clavier tampon ( -> zoneSource ; -> valeurCourante ; Filtre ) -> Ancien frappe clavier
   C_ALPHA(1;$0)
   C_POINTEUR($1;$2)
   C_TEXTE($vtNouvValeur)
   C_ALPHA(255;$3)
      ` Retourne la frappe clavier originale
   $0:=Frappe clavier 
      ` Obtenir la sélection de texte dans la zone saisissable
   TEXTE SELECTIONNE($1->;$vlDébut;$vlFin)
      ` Commencer à travailler sur la valeur courante
   $vtNouvValeur:=$2->
      ` En fonction de la touche enfoncée ou du caractère saisi, effectuer les actions appropriées
   Au cas ou
         ` La touche Retour arrière a été enfoncée    
      : (Code de caractere($0)=Touche Retour arrière )
            ` Supprimer les caractères sélectionnés ou le caractère à gauche du curseur
         $vtNouvValeur:=Supprimer texte ($vtNouvValeur;$vlDébut;$vlFin)
            ` Une touche "flèche" a été appuyée
            ` Ne faites rien sauf accepter la frappe clavier
      : (Code de caractere($0)=Touche gauche )
      : (Code de caractere($0)=Touche droite )
      : (Code de caractere($0)=Touche haut )
      : (Code de caractere($0)=Touche bas )

         ` Un caractère valide a été saisi
      : (Position($0;$3)=0)
         $vtNouvValeur:=Inserer texte ($vtNouvValeur;$vlDébut;$vlFin;$0)
   Sinon 
         ` Le caractère n'est pas accepté
      FILTRER FRAPPE CLAVIER("")
   Fin de cas 
      ` Retourner la valeur pour la prochaine gestion de la frappe clavier
   $2->:=$vtNouvValeur

Cette méthode utilise les sous-méthodes suivantes :

      ` Méthode projet Supprimer texte
      ` Supprimer texte ( Alpha ; Long ; Long ) -> Alpha
      ` Supprimer texte ( -> Texte ; SelDébut ; SelFin ) -> Nouveau texte
   C_TEXTE($0;$1)
   C_ENTIER LONG($2;$3)
   $0:=Sous chaine($1;1;$2-1-Num($2=$3))+Sous chaine($1;$3)
      ` Méthode projet Inserer texte
      ` Inserer texte ( Alpha ; Long ; Long ; Alpha ) -> Alpha
      ` Inserer texte ( -> texteSource ; SelDébut ; SelFin ; Texte à insérer ) -> Nouveau texte
   C_TEXTE($0;$1;$4)
   C_ENTIER LONG($2;$3)
   $0:=$1
   Si ($2#$3)
      $0:=Sous chaine($0;1;$2-1)+$4+Sous chaine($0;$3)
   Sinon 
      Au cas ou 
         : ($2<=1)
            $0:=$4+$0
         : ($2>Longueur($0))
            $0:=$0+$4
      Sinon 
         $0:=Sous chaine($0;1;$2-1)+$4+Sous chaine($0;$2)
      Fin de cas 
   Fin de si 

Une fois que vous avez ajouté ces méthodes projet à votre base, vous pouvez les utiliser de la manière suivante :

      ` Méthode objet de la zone saisissable vaDescription 
   Au cas ou 
      : (Evenement formulaire=Sur chargement )
         vaDescription:=""
         vaDescriptionDouble:=""
            ` Etablir la liste des caractères "interdits" à traiter comme des touches spéciales
            ` (Dans cet exemple, seule la touche Aide est filtrée)
         vaTouchesSpéciales:=Caractere(Touche Aide)
      : (Evenement formulaire=Sur avant frappe clavier)
         $vsKey:=Frappe clavier tampon (->vaDescription;->vaDescriptionDouble;vaTouchesSpéciales)
         Au cas ou 
            : (Code de caractere($vsKey)=Touche Aide)
                          ` Faire quelque chose lorsque la touche Aide est enfoncée
                  ` Dans cet exemple, une saisie de glossaire doit être recherchée et insérée
                chercher_Glossaire (->vaDescription;->vaDescriptionDouble)
         Fin de cas 
   Fin de cas 

La méthode projet chercher_Glossaire est listée ci-dessous (le point principal est l'utilisation de la variable tampon pour réaffecter la zone saisissable à modifier) :

      ` Méthode projet chercher_Glossaire
      ` chercher_Glossaire ( Pointeur ; Pointeur )
      ` chercher_Glossaire ( -> zone saisissable ; ->variable double )

   C_POINTEUR($1;$2)
   C_ENTIER LONG($vlDébut;$vlFin)

      ` Obtenir la sélection de texte dans la zone saisissable
   TEXTE SELECTIONNE($1->;$vlDébut;$vlFin)
      ` Obtenir le texte sélectionné ou le mot situé à gauche du curseur
   $vtTexteSelectionne:=obtenirTexteSelectionne ($2->;$vlDébut;$vlFin)
      ` Y a-t-il quelque chose à rechercher ?
   Si ($vtTexteSelectionne#"")
         ` Si la sélection de texte était le curseur, la sélection débute au mot situé après le curseur
      Si ($vlDébut=$vlFin)
         $vlDébut:=$vlDébut-Longueur($vtTexteSelectionne)
      Fin de si 
         ` Chercher la première entrée du glossaire disponible  
      CHERCHER([Glossaire];[Glossaire]Saisie=$vtTexteSelectionne+"@")
         ` Existe-t-elle ?
      Si (Enregistrements trouves([Glossaire])>0)
            ` Si oui, l'insérer dans la zone tampon
         $2->:=Inserer texte ($2->;$vlDébut;$vlFin;[Glossaire]Saisie)
            ` Copier le tampon dans la zone saisissable
         $1->:=$2->
            ` Fixer la sélection après avoir inséré l'entrée du glossaire
         $vlFin:=$vlDébut+Longueur([Dictionnaire]Saisie)
         SELECTIONNER TEXTE(vsComments;$vlFin;$vlFin)
      Sinon 
            ` Il n'y a pas d'entrée qui correspond dans le glossaire    
         BEEP
      Fin de si 
   Sinon 
         ` Il n'y a pas de texte sélectionné  
      BEEP
   Fin de si 

La méthode obtenirTexteSelectionne est la suivante :

      ` Méthode objet obtenirTexteSelectionne
      ` obtenirTexteSelectionne ( Alpha ; Entier long ; Entier long ) -> Alpha
      ` obtenirTexteSelectionne ( Texte ; SelDébut ; SelFin ) -> texte sélectionné
   C_TEXTE($0;$1)
   C_ENTIER LONG($2;$3)
   Si ($2<$3)
      $0:=Sous chaine($1;$2;$3-$2)
   Sinon 
      $0:=""
      $2:=$2-1
      Repeter
         Si ($2>0)
            Si (Position($1[[$2]];"  ,.!?:;()-_–—")=0)
               $0:=$1[[$2]]+$0
               $2:=$2-1
            Sinon 
               $2:=0
            Fin de si 
         Fin de si 
      Jusque ($2=0)
   Fin de si 

Référence

Evenement formulaire, Frappe clavier, Lire texte edite.


4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant