Contexte technique et fonctionnel
Lors de mes développements personnels, j'ai du manipuler le champ interrupteur, celui-ci peut être manipuler par programmation avec les fonctions proposés par WinDev :
- InterrupteurAjoute ;
- InterrupteurInsère ;
- InterrupteurOccurrence (nouveauté WinDev 20) ;
- InterrupteurSupprime.
L'ensemble de ces fonctions permettent un certains nombre d'actions mais ne couvraient pas l'ensemble de mes besoins, j'ai donc créé de nouvelles fonctions et j'ai décidé de les partager pour permettre
- à la communauté de les utiliser ;
- une évolution de celles-ci avec les éventuelles retour.
Version de WinDev : 20 et antérieures
Modfication du 22/09/2015 : Une version des fonctions avec le type de variable Champ est disponible dans ce billet WinDev : fonctions de sélection/désélection des champs interrupteurs V2
Version de WinDev : 19 et supérieures
Les fonctions
Le nom des fonctions a été créé en conservant la même syntaxe que celles proposées par PC-Soft
InterrupteurSelectionne
Cette fonction permet de sélectionner plusieurs options d'un champ interrupteur en passant les indices en paramètres
Code WinDev : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // Résumé : <indiquez ici ce que fait la procédure> // Syntaxe : //InterrupteurSelectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau) // // Paramètres : // ps_champ (chaîne ANSI) : nom du chqmpde type interrupteur // pt_LstIndice (tableau) : Liste des indices à sélectionner // Valeur de retour : // Aucune // // Exemple : // InterrupteurSelectionne(Int_options,[1,2,3]) // PROCEDURE InterrupteurSelectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers) //----->Declaration des variables ls_MessageErreur est une chaîne li_interrupteurOccurrence est un entier //----->Initialisation des variables ls_MessageErreur="Vous avez appelé l'opérateur [] sur le champ %1."+RC+... "L'indice spécifié [%2] est invalide. "+RC+... "Les valeurs valides sont comprises entre 1 et %3 (inclus)." SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typInterr ALORS //----->Initialisation des variables li_interrupteurOccurrence={ps_champ,indChamp}..Occurrence POUR li_i=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS {ps_champ,indChamp}[pt_LstIndice[li_i]]=Vrai SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_interrupteurOccurrence)) FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN |
Exemple d'utilisation :
Code WinDev : | Sélectionner tout |
InterrupteurSelectionne(Int_LstOptions..nom,[1,3,5,7])
InterrupteurSelectionneTout
Cette fonction sélectionne toutes les options du champ interrupteur passé en paramètre
Code WinDev : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // Résumé : Sélectionne toutes les options d'un champ de type interrupteur // Syntaxe : //InterrupteurSelectionneTout (<ps_champ> est chaîne) // // Paramètres : // ps_champ (chaîne ANSI) : Nom du champ de type interrupteur // Valeur de retour : // Aucune // // Exemple : // InterrupteurSelectionneTout(Int_LstOptions..Nom) // PROCEDURE InterrupteurSelectionneTout(ps_champ est un chaîne) SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typInterr ALORS POUR li_i=1 _A_ InterrupteurOccurrence(ps_champ) {ps_champ,indChamp}[li_i]=1 FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN |
Exemple d'utilisation :
Code WinDev : | Sélectionner tout |
InterrupteurSelectionneTout(Int_LstOPtions..nom)
InterrupteurDeselectionne
Cette fonction permet de désélectionner plusieurs options d'un champ interrupteur en passant les indices en paramètres
Code WinDev : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // Résumé : Déselectionne les options du champ interrupteur passé en paramètre 1 avec les indices passé en paramètre 2 // Syntaxe : //InterrupteurDeselectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau) // // Paramètres : // ps_champ (chaîne ANSI) : nom du champ interrupteur à manipuler // pt_LstIndice (tableau) : Liste des indices des options à désélectionner // Valeur de retour : // Aucune // // Exemple : // InterrupteurDeselectionne (Int_LstOptions..nom,[1,3,7]) // PROCEDURE InterrupteurDeselectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers) //----->Declaration des variables ls_MessageErreur est une chaîne li_interrupteurOccurrence est un entier //----->Initialisation des variables ls_MessageErreur="Vous avez appelé l'opérateur [] sur le champ %1."+RC+... "L'indice spécifié [%2] est invalide. "+RC+... "Les valeurs valides sont comprises entre 1 et %3 (inclus)." SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typInterr ALORS //----->Initialisation des variables li_interrupteurOccurrence={ps_champ,indChamp}..Occurrence POUR li_i=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS {ps_champ,indChamp}[pt_LstIndice[li_i]]=Faux SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_interrupteurOccurrence)) FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN |
Exemple d'utilisation :
Code WinDev : | Sélectionner tout |
InterrupteurDeselectionne(Int_LstOPtions..nom,[1,3,7])
InterrupteurDeselectionneTout
Cette fonction désélectionne toutes les options du champ interrupteur passé en paramètre
Code WinDev : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // Résumé : Déselectionne toutes les option d'un interrupteur // Syntaxe : //InterrupteurDeselectionneTout (<ps_champ> est chaîne) // // Paramètres : // ps_champ (chaîne ANSI) : Nom du champ de type interrupteur // Valeur de retour : // Aucune // // Exemple : // InterrupteurDeselectionneTout(Int_option..nom) // PROCEDURE InterrupteurDeselectionneTout(ps_champ est un chaîne) SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typInterr ALORS POUR li_i=1 _A_ InterrupteurOccurrence(ps_champ) {ps_champ,indChamp}[li_i]=0 FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN |
Exemple d’utilisation :
Code WinDev : | Sélectionner tout |
InterrupteurDeselectionneTout(Int_LstOPtions..nom)
Les exceptions
Comme vous avez pu le constater en lisant le code source des fonctions, celles-ci déclenchent des exceptions en cas de problème. Trois types d'exceptions sont gérées :
Code | Message |
1 | Le champ '%%Champ%%' n'existe pas |
2 | Le champ '%%Champ%%' n'est pas de type interrupteur |
3 | Vous avez appelé l'opérateur [] sur le champ %%Champ%%.<br> "L'indice spécifié [%Indice%%] est invalide. "+RC+... "Les valeurs valides sont comprises entre 1 et %%Occurrence%% (inclus). |
InterrupteurSelectionne
Code WinDev : | Sélectionner tout |
1 2 3 4 5 | QUAND EXCEPTION DANS InterrupteurSelectionne(Int_LstOptions..Nom,[1,3,4,20]) FAIRE //Gestion des exceptions FIN |
InterrupteurSelectionneTout
Code WinDev : | Sélectionner tout |
1 2 3 4 5 | QUAND EXCEPTION DANS InterrupteurSelectionneTout(Int_LstOptions..Nom) FAIRE //Gestion des exceptions FIN |
InterrupteurDeselectionne
Code WinDev : | Sélectionner tout |
1 2 3 4 5 | QUAND EXCEPTION DANS InterrupteurDeSelectionne(Int_LstOptions..Nom,[1,3,4,20]) FAIRE //Gestion des exceptions FIN |
InterrupteurDeselectionneTout
Code WinDev : | Sélectionner tout |
1 2 3 4 5 | QUAND EXCEPTION DANS InterrupteurDeselectionneTout(Int_LstOptions..Nom,[1,3,4,20]) FAIRE //Gestion des exceptions FIN |
Conclusion
Par ce billet, je viens de mettre à disposition de la communauté des fonctions pour améliorer la gestion par programmation du champ Interrupteur. N'hésitez pas à me faire part de vos retours pour améliorer, compléter la liste de ces fonctions.
A voir, si PC-Soft intégrera ces propositions dans une future version de son EDI.
Bon dev à tous