fonctions de sélection/désélection des champs interrupteurs

L'ensemble des fonctions proposées par WinDev ne couvraient pas l'ensemble de mes besoins, j'ai donc créé de nouvelles fonctions et j'ai décidé de les partager.

Version de WinDev : 20 et antérieures

j'ai essayé de conserver le nom des fonctions avec 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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
InterrupteurDeselectionne(Int_LstOPtions..nom,[1,3,7])

InterrupteurSelectionneTout

Cette fonction désélectionne toutes les options du champ interrupteur passé en paramètre

Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
InterrupteurDeselectionneTout(Int_LstOPtions..nom)

Les exceptions

Dans le code de ces fonction, j'ai géré les problèmes en générant des exceptions

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).

Exemple d'utilisation avec la gestion des exceptions :

InterrupteurSelectionne

Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
1
2
3
4
5
QUAND EXCEPTION DANS 
	InterrupteurSelectionneTout(Int_LstOptions..Nom)
FAIRE
	//Gestion des exceptions
FIN

InterrupteurDeselectionne

Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
1
2
3
4
5
QUAND EXCEPTION DANS 
	InterrupteurDeselectionneTout(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
	//Gestion des exceptions
FIN

N'hésitez pas à me faire par de vos retours pour améliorer, compléter la liste de ces fonctions.

Bon dev à tous