Depuis la version 23 de WINDEV, il possible dans une zone répétée d'ajouter un contenu différent pour chaque répétition. C'est la commande ZoneRepetéeAjouteFI() qui permet d'ajouter une fenêtre interne dans la répétition.


Une fois les fenêtre internes ajoutées dans la zone répétée, il peut être intéressant d'accéder aux champs de la fenêtre interne ou d'exécuter une procédure de la fenêtre interne.


Pour cela, il est nécessaire de récupérer le champ fenêtre interne ajouté dans la zone répétée. Pour cela, je vous propose d'utiliser la procédure suivante qui retourne le champ fenêtre interne ou Null, si la fenêtre n'est pas encore affichée.

PROCÉDURE pFenetreInterneDeZR(sZR est un Champ, nIndice est un entier)

 

// On récupère le nom de la fenêtre interne

sNomZR est une chaîne = sZR[nIndice]..Nom
// On vérifie si elle existe.

SI sNomZR [= sZR..Nom ALORS RENVOYER Null

QUAND EXCEPTION DANS

pChamp est un Champ <- { ChaîneConstruit("%1[%2].%3", sZR..Nom, nIndice, sNomZR), indChamp}

FAIRE

RENVOYER Null

FIN

RENVOYER pChamp

 

Il suffit ensuite dans la zone répétée ou dans sa fenêtre conteneur, utiliser uen variable de type champ pour accéder au contenu de la fenêtre interne.

// Exemple : Changer la couleur des colonnes de table contenues
// dans les fenêtre internes

pFIDeZR est un Champ

POUR TOUTE LIGNE Indice DE ZoneRépétée1

pFIDeZR <- pFenetreInterneDeZR(ZoneRépétée1, Indice)

SI pFIDeZR<>Null ALORS
// Change la couleur des tables.

pFIDeZR.ColoreTable()

FIN

FIN

 

//Exemple : Changer le contenu d'un champ de la fenêtre interne.

pFIDeZR <- pFenetreInterneDeZR(ZoneRépétée1, 3)

pFIDeZR.Libellé1 = "Nouveau libéllé"

 

< Retour

1 commentaire

apumel
20/03/2024 - 17:58 - Répondre
Merci pour ce code. Petit complément utile dans certains cas : insérer une temporisation à l'aide de la fonction Multitache() après la récupération du nom de la fenêtre interne pour éviter qu'une exception se déclenche.

Publier un commentaire : 
Votre adresse email ne sera pas publiée