1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

TUTO Majuscule sur la première lettre de tous les mots, en cours de saisie

Discussion dans 'Windev' créé par haffar, Juin 5, 2018.

  1. haffar

    haffar Member

    Inscrit:
    Juin 5, 2018
    Messages:
    30
    J'aime reçus:
    63
    Une petite fonction qui permet à la volée de saisir un texte dans un champ de saisie et d'en obtenir un formatage direct avec une majuscule sur chaque début de mot, et le reste en minuscule.

    Exemple :
    [​IMG]

    On voit bien ici que même les ponctuations particulières sont gérées (plusieurs séparateurs possibles détectés).


    Usage dans le code :

    J'ai taché de rendre le plus simple possible l'appel de la procédure. Il faut donc juste écrire ceci dans le code événementiel "Sur Touche RELACHÉE" d'un champ de saisie :


    [​IMG]


    La procédure à insérer dans une collection de procédures globales :

    [​IMG]


    ATTENTION : pour les versions plus anciennes de windev, le code doit être légèrement modifié. En effet avant la version 22, on ne pouvait pas transmettre un champ en paramètre d'une procédure. On transmettait donc son nom, sous forme de chaîne, et on récupérait le contrôle ensuite sur ce champ via une indirection de champ dans une variable locale.

    Il faudra donc changer le début de la fonction, et son appel comme suit :

    1) Modifiez ces 2 lignes dans la procédure :
    [​IMG]

    2) Et transmettrez le "nom" du champ, et non pas le champ lui même en paramètre :
    [​IMG]





    Le code à copier en brut (Version 22 et supérieures) :


    Code (Windev):

    PROCEDURE MajusculesSurPremieresLettres_SurToucheRelachée(sNomchampdesaisie est une chaîne) PChampDeSaisie est un Champ <- {sNomchampdesaisie,indChamp}// on mémorise l'emplacement initial du curseur (important pour plus tard)
    sSource est une chaîne ANSI = Pchampdesaisie..Valeur
    nCurseur est un entier = Pchampdesaisie..Curseur
    sSeparateur est une chaîne = ""
    sResultat est une chaîne = ""
    nCodeTouche est un entier = _EVE.wParam // on récupère le code de la touche appuyée
    // on distinguera le cas ou l'on est en train d'insérer du texte en milieu de chaine
    bInsertion est un booléen = nCurseur <

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (Pchampdesaisie..Valeur)

    // on laisse les caractères spéciaux tranquilles
    SI nCodeTouche<33 ALORS RETOUR
    // on laisse tranquille les flèches directionnelles aussi
    SI nCodeTouche>= 0x23 _ET_ nCodeTouche <=0x28 ALORS RETOUR
    // pour chaque mot de notre chaine ...
    // (ici différents types de séparateurs tolérés)
    POUR TOUTE CHAÎNE sMot, nPositionSeparateur DE sSource SÉPARÉE PAR [" ","-",";","/",":","_",".","?","!",","]
    /// on met la première lettre en majuscule, et le reste en minuscule
    // un faux séparateur ne nous intéresse pas (avant le premier mot)
    SI nPositionSeparateur <2 ALORS
      sSeparateur = " "
    SINON
      // on récupère le caractère du séparateur (virgule ? espace ? etc ?)
      sSeparateur =

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sSource,nPositionSeparateur-1,1)
     
    FIN
    sResultat+= sSeparateur +  

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sMot[[1]]) +

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sMot,2))
    //sResultat+= " " + Majuscule(sMot[[1]]) + Minuscule(Milieu(sMot,2))
    FIN
    // on réaffecte la chaine au champ
    Pchampdesaisie =

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sResultat,2) // on retire le premier espace de la boucle
    // en n'oubliant pas de passer le curseur à la position suivante (telle que mémorisée au début + 1)
    SI PAS bInsertion ALORS
    Pchampdesaisie..Curseur = nCurseur+1
    SINON
    // sauf si on est en insertion, ou l'on remet le curseur au même endroit.
    Pchampdesaisie..Curseur = nCurseur FIN
    [code]


    [B]Le code à copier en brut (Version plus anciennes :[/B]


    [code=windev]
    PROCEDURE MajusculesSurPremieresLettres_SurToucheRelachée(Pchampdesaisie est un Champ)
    // on mémorise l'emplacement initial du curseur (important pour plus tard)
    sSource est une chaîne ANSI = Pchampdesaisie..Valeur
    nCurseur est un entier = Pchampdesaisie..Curseur
    sSeparateur est une chaîne = ""
    sResultat est une chaîne = ""
    nCodeTouche est un entier = _EVE.wParam // on récupère le code de la touche appuyée
    // on distinguera le cas ou l'on est en train d'insérer du texte en milieu de chaine
    bInsertion est un booléen = nCurseur <

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (Pchampdesaisie..Valeur)

    // on laisse les caractères spéciaux tranquilles
    SI nCodeTouche<33 ALORS RETOUR
    // on laisse tranquille les flèches directionnelles aussi
    SI nCodeTouche>= 0x23 _ET_ nCodeTouche <=0x28 ALORS RETOUR
    // pour chaque mot de notre chaine ...
    // (ici différents types de séparateurs tolérés)
    POUR TOUTE CHAÎNE sMot, nPositionSeparateur DE sSource SÉPARÉE PAR [" ","-",";","/",":","_",".","?","!",","]
    /// on met la première lettre en majuscule, et le reste en minuscule
    // un faux séparateur ne nous intéresse pas (avant le premier mot)
    SI nPositionSeparateur <2 ALORS
      sSeparateur = " "
    SINON
      // on récupère le caractère du séparateur (virgule ? espace ? etc ?)
      sSeparateur =

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sSource,nPositionSeparateur-1,1)
     
    FIN
    sResultat+= sSeparateur +  

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sMot[[1]]) +

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sMot,2))
    //sResultat+= " " + Majuscule(sMot[[1]]) + Minuscule(Milieu(sMot,2))
    FIN
    // on réaffecte la chaine au champ
    Pchampdesaisie =

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sResultat,2) // on retire le premier espace de la boucle
    // en n'oubliant pas de passer le curseur à la position suivante (telle que mémorisée au début + 1)
    SI PAS bInsertion ALORS
    Pchampdesaisie..Curseur = nCurseur+1
    SINON
    // sauf si on est en insertion, ou l'on remet le curseur au même endroit.
    Pchampdesaisie..Curseur = nCurseur FIN
     
    Source :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    #1 haffar, Juin 5, 2018
    Dernière édition: Juin 5, 2018
    Tags:

Partager cette page

Chargement...