PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Problème avec EnumèreChamp et Ongets
Problème avec EnumèreChamp et Ongets
Iniciado por Christophe PRADEL, 10,abr. 2019 12:34 - 1 respuesta
Miembro registrado
139 mensajes
Publicado el 10,abril 2019 - 12:34
Bonjour à tous et à toutes.

Je rencontre un problème avec l'utilisation de la fonction EnumèreChamp

Je constate que lorsque dans ma fenêtre j'ai un champ onglet dans un des volets d'un autre champ onglet, alors je n'arrive pas à atteindre le contenu des sous onglets en parcourant les champs par EnumèreChamp. Ou pire, il se mélange entre volets et sous volets d'onglets.

Pour accéder aux champs des conteneurs (tels que les onglets), j'ai une procédure récursive :

PROCEDURE INTERNE TraiteParent(LOCAL sParent est une chaîne)

i est un entier = 1
sNomChamp est une chaîne
tabParents est un tableau de chaînes
// Boucle sur les champs
sNomChamp = EnumèreChamp(sParent,i)
TANTQUE sNomChamp <> ""
i++
// Récupération du champ
nType est un entier = {sParent + "." + sNomChamp, indChamp}..Type
// Si conteneurt, traitement contenu
SI nType DANS
(typDisposition, typFen, typGrp, typFenêtreInterne, typModèleDeChamp, typOnglet, typPanneau, typRegroupementRuban, typRuban, typSuperChamp, typTiroir, typVoletOnglet, typZoneMultiligne, typZoneRépétée) ALORS
tabParents.Ajoute(sNomChamp)
SINON
Trace(sNomChamp)
FIN

// Champ suivant
sNomChamp = EnumèreChamp(sParent,i)

FIN

POUR TOUT sNomChamp de tabParents
Trace(sNomChamp)
TraiteParent(sParent + "." + sNomChamp)
FIN
FIN

TraiteParent(MaFenêtre..NomComplet)


Quelqu'un peut-il tester ce code. Je suis actuelle ment en WD24 54t

Merci
Miembro registrado
139 mensajes
Publicado el 11,abril 2019 - 10:17
Bon, comme je vois que le sujet ne passionne personne et que j'ai depuis expérimenté une solution à ce problème, je vous livre cette solution de contournement, en espérant que cela pourra aider un jour quelqu'un.

Le problème venait du fait que la fonction EnumèreChamp, lorsqu'elle s'applique à un onglet, renvoie le nom de chaque volet sous la forme

FEN_XXX.ONG_YYY.ALIAS_S_n

où n représente le N° de volet

Or, pour scruter le contenu d'un volet, je relançait EnumèreChamp avec ce nom et là, ça plantait ou ça ignorait les sous éléments de type Onglets.

Finanlement, en transformant le nom FEN_XXX.ONG_YYY.ALIAS_S_n en FEN_XXX.ONG_YYY[n], la fonction EnumèreChamp fonctionne à merveille !

J'ai donc complété ma fonction ainsi :

PROCEDURE INTERNE TraiteParent(LOCAL sParent est une chaîne)

i est un entier = 1
sNomChamp est une chaîne
tabParents est un tableau de chaînes

// Cas des Volets d'Onglets
p est un entier = Position(sParent,".ALIAS_S_")
SI (p > 0) ALORS
sParent = Remplace(sParent,".ALIAS_S_","[") + "]"
FIN

// Boucle sur les champs
sNomChamp = EnumèreChamp(sParent,i)
TANTQUE sNomChamp <> ""
i++
// Récupération du champ
nType est un entier = {sParent + "." + sNomChamp, indChamp}..Type
// Si conteneurt, traitement contenu
SI nType DANS
(typDisposition, typFen, typGrp, typFenêtreInterne, typModèleDeChamp, typOnglet, typPanneau, typRegroupementRuban, typRuban,
typSuperChamp, typTiroir, typVoletOnglet, typZoneMultiligne, typZoneRépétée) ALORS
tabParents.Ajoute(sNomChamp)
SINON
Trace(sNomChamp)
FIN

// Champ suivant
sNomChamp = EnumèreChamp(sParent,i)

FIN

POUR TOUT sNomChamp de tabParents
Trace(sNomChamp)
TraiteParent(sParent + "." + sNomChamp)
FIN
FIN

TraiteParent(MaFenêtre..NomComplet)