Nouvelles fonctions pour améliorer la gestion de sélection/désélection d'un champ Interrupteur par programmation V2
Contexte technique
Dans le premier billet WinDev : fonctions de sélection/désélection des champs interrupteurs, je mettais à disposition une collection de procédures facilitant la gestion d'un champ de type interrupteur en proposant un ensemble de possibilité pour gérer la sélection/désélection. Ces fonctions :
- InterrupteurSelectionne
- InterrupteurSelectionneTout
- InterrupteurDeselectionne
- InterrupteurDeselectionneTout
prenaient en premier paramètre le nom du champ sous forme de chaine de caractère. Depuis WinDev 19, un nouveau type de variable est disponible : Champ.
Je met à disposition une nouvelle version de ces fonctions avec ce type de variable.
Version de WinDev : 19 et supérieures
Les fonctions
InterrupteurSelectionne
Cette fonction permet de sélectionner plusieurs options d'un champ interrupteur en passant les indices en paramètres
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 43
|
/ Résumé : Selectionne les indices passés en paramètres
// Syntaxe :
//InterrupteurSelectionne (<pc_champ> est champ, <pt_LstIndice> est tableau)
//
// Paramètres :
// pc_champ (champ) : Nom du champ de type interrupteur
// pt_LstIndice (tableau) : Liste des indices à sélectionner
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurSelectionne(Int_ListeEtat,[1,3,5])
//
PROCEDURE InterrupteurSelectionne(pc_champ est un Champ,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(pc_champ..Nom) ALORS
SI pc_champ..Type = typInterr ALORS
//----->Initialisation des variables
li_interrupteurOccurrence=pc_champ..Occurrence
POUR li_i=1 _A_ pt_LstIndice..Occurrence
SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS
pc_champ[pt_LstIndice[li_i]]=Vrai
SINON
ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,pc_champ..NomComplet,pt_LstIndice[li_i],li_interrupteurOccurrence))
FIN
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' n'existe pas")
FIN |
Exemple d'utilisation :
InterrupteurSelectionne(Int_LstOptions,[1,3,5,7])
InterrupteurSelectionneTout
Cette fonction sélectionne toutes les options du champ interrupteur passé en paramètre
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
|
// Résumé : Sélectionne toutes les options d'un champ de type interrupteur
// Syntaxe :
//InterrupteurSelectionneTout (<pc_champ> est champ)
//
// Paramètres :
// pc_champ (champ) : Nom du champ de type interrupteur
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurSelectionneTout(Int_LstOptions)
//
PROCEDURE InterrupteurSelectionneTout(pc_champ est un Champ)
SI ChampExiste(pc_champ..Nom) ALORS
SI pc_champ..Type = typInterr ALORS
POUR li_i=1 _A_ InterrupteurOccurrence(pc_champ)
pc_champ[li_i]=1
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' n'existe pas")
FIN |
Exemple d'utilisation :
InterrupteurSelectionneTout(Int_LstOPtions)
InterrupteurDeselectionne
Cette fonction permet de désélectionner plusieurs options d'un champ interrupteur en passant les indices en paramètres
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 43
|
// Résumé : Déselectionne les interrupteurs des lignes passées en paramètres
// Syntaxe :
//InterrupteurDeselectionne (<pc_champ> est champ, <pt_LstIndice> est tableau)
//
// Paramètres :
// pc_champ (champ) : Nom du champ de type interrupteur
// pt_LstIndice (tableau) : Liste des indices à sélectionner
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurSelectionneTout(Int_option)
//
PROCEDURE InterrupteurDeselectionne(pc_champ est un Champ,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(pc_champ..NomComplet) ALORS
SI pc_champ..Type = typInterr ALORS
//----->Initialisation des variables
li_interrupteurOccurrence=pc_champ..Occurrence
POUR li_i=1 _A_ pt_LstIndice..Occurrence
SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS
pc_champ[pt_LstIndice[li_i]]=Faux
SINON
ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,pc_champ..NomComplet,pt_LstIndice[li_i],li_interrupteurOccurrence))
FIN
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' n'existe pas")
FIN |
Exemple d'utilisation :
InterrupteurDeselectionne(Int_LstOPtions,[1,3,7])
InterrupteurDeselectionneTout
Cette fonction désélectionne toutes les options du champ interrupteur passé en paramètre
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
|
// Résumé : Déselectionne toutes les option d'un interrupteur
// Syntaxe :
//InterrupteurDeselectionneTout (<pc_champ> est champ)
//
// Paramètres :
// pc_champ (champ) : Nom du champ de type interrupteur
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurDeselectionneTout(Int_option)
//
PROCEDURE InterrupteurDeselectionneTout(pc_champ est un Champ)
SI ChampExiste(pc_champ..NomComplet) ALORS
SI pc_champ..Type = typInterr ALORS
POUR li_i=1 _A_ InterrupteurOccurrence(pc_champ)
pc_champ[li_i]=0
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' n'existe pas")
FIN |
Exceptions
Pour plus de renseignements sur la gestion des exceptions , voir le billet initial WinDev : fonctions de sélection/désélection des champs interrupteurs
Conclusion
Par ce billet, je viens de mettre à disposition les fonctions pour améliorer la gestion par programmation du champ Interrupteur avec le type de variable Champ. 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.