4D v16.3

FILTRER FRAPPE CLAVIER

Accueil

 
4D v16.3
FILTRER FRAPPE CLAVIER

FILTRER FRAPPE CLAVIER 


 

FILTRER FRAPPE CLAVIER ( carFiltré ) 
Paramètre Type   Description
carFiltré  Chaîne in Caractère(s) de remplacement ou Chaîne vide pour annuler le filtrage clavier

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.

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.

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.

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



Voir aussi  

Evenement formulaire
Frappe clavier
Lire texte edite

 
PROPRIÉTÉS 

Produit : 4D
Thème : Gestion de la saisie
Numéro : 389
Nom intl. : FILTER 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)