DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Procédures WLangage
  • Présentation
  • Déclaration
  • Exemples
  • Remplacer des tabulation par des espaces
  • Extension du type Couleur
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
Une procédure d'extension permet d'ajouter des procédures WLangage "personnelles" aux types du langage (chaîne, date, couleur, etc.). Ces procédures peuvent ensuite être appelées comme des fonctions natives du WLangage. Le type de base du WLangage est alors "étendu".
Pour indiquer qu'une procédure est une procédure d'extension, il est nécessaire que :
  • le premier paramètre utilise le type qui doit être "étendu",
  • le prototype de la procédure comporte l'attribut <extension>.
Déclaration
Exemple de déclaration d'une procédure d'extension du type chaîne :
PROCÉDURE MaProcédurePerso(s est une chaîne) <extension>
Remarques :
  • Les procédures d'extension apparaissent dans l’assistance de code (complétion) du type étendu.
  • Les procédures d'extension ne peuvent pas être définies sur le type Booléen, Entier, Réel, Numérique, etc. (tous les types permettant de manipuler des valeurs numériques).
  • Seuls les types du WLangage peuvent être étendus.
  • Seules les procédures globales peuvent avoir l'attribut <extension>.
  • Si la procédure d'extension surcharge une fonction WLangage, la syntaxe classique de la fonction WLangage sera également surchargée. Par exemple, la création d'une procédure d'extension "Formate" sur le type chaîne surchargera la fonction <Chaîne>.Formate et la fonction ChaineFormate.
  • Il est possible d'enchainer les appels à des procédures d'extension.
  • Le mot-clé 'This' a le même comportement que dans les classes ou les champs : il référence l'élément en cours d'appel.
    Dans le cas d'une procédure d'extension, le mot-clé 'This' référence le premier paramètre.
    Il est donc possible d'utiliser 'This' précédé de 'WL' pour référencer les fonctions standards du WLangage et ainsi éviter les appels à une fonction surchargée.
    Exemple :
    PROCÉDURE Formate(x est un chaîne) : chaîne <extension>
    Trace(This) // équivalent à Trace(x)
    RENVOYER WL.This.Formate(ccMajuscule) // Appel le Formate standard
  • Les procédures peuvent être définies pour un type de champ donné en utilisant l'attribut <type champ>. Par exemple, la procédure suivante est utilisable pour un champ Bouton :
    PROCÉDURE Bouton(x est un Champ <type champ = typBouton>)

    Il est possible d'étendre une procédure pour un type de champ donné en utilisant la syntaxe suivante
    PROCÉDURE MaProcédureChampExtension(x est un champ <type champ = xxx>)<extension>

    Exemple :
    PROCÉDURE ExtensionBouton(x est un Champ <type champ = typBouton>) <extension>
Exemples

Remplacer des tabulation par des espaces

Procédure permettant de remplacer les tabulations par des espaces :
PROCÉDURE RemplaceTABParXEspace(s est une chaîne, n est un entier) <extension> : chaîne
RENVOYER s.Remplace(TAB, Répète(" ", n))
L'appel de la procédure d'extension est le suivant :
sTexte est une chaîne = TAB + "XXX"
Trace(sTexte) // <TAB>XXX
Trace(sTexte.RemplaceTABParXEspace(4)) //     XXX

Extension du type Couleur

Procédure permettant d'étendre le type Couleur, afin de récupérer une couleur de texte qui s'affichera lisiblement sur une couleur de fond donnée.
PROCÉDURE CouleurLisible(CouleurOrigine est une Couleur) <extension> : Couleur
nLuminosité est un entier
rLuminance est un réel
CouleurRetour est une Couleur

// Calcul de la luminance de la couleur passée en paramètre
rLuminance = 1 - (0.299 * CouleurOrigine..Rouge + ...
		0.587 * CouleurOrigine..Vert + 0.114 * CouleurOrigine..Bleu)/255
// En fonction de la luminance, la couleur d'écriture doit avoir une faible ou une forte luminosité
SI rLuminance < 0.5 ALORS
	// Faible luminosité
	nLuminosité = 12
SINON
	// Forte luminosité
	nLuminosité = 88
FIN
// La couleur renvoyée conserve la tonalité et la saturation
CouleurRetour = TSL(CouleurTeinte(CouleurOrigine), CouleurSaturation(CouleurOrigine), nLuminosité)

RENVOYER CouleurRetour
L'appel de la procédure d'extension est le suivant :
// Tableau de couleurs
tabCouleursHTML est un tableau de chaînes
tabCouleursHTML.Ajoute("#F48FB1")
tabCouleursHTML.Ajoute("#C2185B")
tabCouleursHTML.Ajoute("#64B5F6")
tabCouleursHTML.Ajoute("#1565C0")
tabCouleursHTML.Ajoute("#81C784")
tabCouleursHTML.Ajoute("#2E7D32")

MaCouleur est une Couleur
// Récupère une couleur aléatoire
MaCouleur = HTMLVersRVB(tabCouleursHTML[Hasard(1, tabCouleursHTML..Occurrence)] )
// Applique la couleur initiale en couleur de fond
LIB_TestCouleurFond.CouleurFond = MaCouleur
// Applique une couleur lisible en couleur de texte
LIB_TestCouleurFond.Couleur = MaCouleur.CouleurLisible()
Liste des exemples associés :
ProceduresDExtension Exemples didactiques : ProceduresDExtension
[ + ] Cet exemple montre l'utilisation de l'attribut <extension>, pour ajouter des fonctionnalités sur les types du WLangage.
Version minimum requise
  • Version 28
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 15/05/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale