IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

WinDev : fonctions de gestion des champs interrupteurs
Par dsr57

Le , par dsr57

0PARTAGES

Nouvelles fonctions pour améliorer la gestion de sélection/désélection d'un champ Interrupteur par programmation

Contexte technique et fonctionnel


181482

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 :



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


181481

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

// Résumé :
// Syntaxe :
//InterrupteurSelectionne ( est chaîne, 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_interrupteurOccurrence ALORS
{ps_champ,indChamp}[pt_LstIndice]=Vrai
SINON
ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice,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 :

InterrupteurSelectionne(Int_LstOptions..nom,[1,3,5,7])

InterrupteurSelectionneTout

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

// Résumé : Sélectionne toutes les options d'un champ de type interrupteur
// Syntaxe :
//InterrupteurSelectionneTout ( 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}=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 :

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

// Résumé : Déselectionne les options du champ interrupteur passé en paramètre 1 avec les indices passé en paramètre 2
// Syntaxe :
//InterrupteurDeselectionne ( est chaîne, 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_interrupteurOccurrence ALORS
{ps_champ,indChamp}[pt_LstIndice]=Faux
SINON
ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice,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 :

InterrupteurDeselectionne(Int_LstOPtions..nom,[1,3,7])

InterrupteurDeselectionneTout

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

// Résumé : Déselectionne toutes les option d'un interrupteur
// Syntaxe :
//InterrupteurDeselectionneTout ( 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}=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 :

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

"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

QUAND EXCEPTION DANS
InterrupteurSelectionne(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
//Gestion des exceptions
FIN

InterrupteurSelectionneTout

QUAND EXCEPTION DANS
InterrupteurSelectionneTout(Int_LstOptions..Nom)
FAIRE
//Gestion des exceptions
FIN

InterrupteurDeselectionne

QUAND EXCEPTION DANS
InterrupteurDeSelectionne(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
//Gestion des exceptions
FIN

InterrupteurDeselectionneTout

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 :ccool:

Vous avez lu gratuitement 1 931 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !