|
Lister tous les champs d'une fenêtre |
Started by Alain Blanc, Apr., 12 2006 1:28 PM - 16 replies |
| |
| | | |
|
| |
Posted on April, 12 2006 - 1:28 PM |
Hello,
J'aimerais lister tous les champs d'une fenêtre, helas la fonction EnumèreChamp ne tiens pas compte des champs sur un onglet ou d'un superchamps.
J'ai bien tenté de créer une procédure récursive, mais pour cela je dois tester le "Type" des champs de ma fenêtre, malheureusement les SuperChamps ne possède pas la propriété "..Type" (étrange non ??).
Quelqu'un peut-il m'aider pour connaire tous les champs d'une fenêtre ?
BLANC BLANC |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 1:32 PM |
Bonjour C'est dans l'aide....mais bon je suis sympas alors i est un entier = 1 ResChamp est une chaîne ResChamp = EnumèreChamp(FenêtreSaisie, i) WHILE ResChamp<>"" i++ trace(ResChamp) ResChamp = EnumèreChamp(FenêtreSaisie, i) END
"Alain Blanc" <ablanc@lasociete.com> a écrit dans le message de news: 443cc7b8$1@news.pcsoft.fr...
Hello,
J'aimerais lister tous les champs d'une fenêtre, helas la fonction EnumèreChamp ne tiens pas compte des champs sur un onglet ou d'un superchamps.
J'ai bien tenté de créer une procédure récursive, mais pour cela je dois tester le "Type" des champs de ma fenêtre, malheureusement les SuperChamps ne possède pas la propriété "..Type" (étrange non ??).
Quelqu'un peut-il m'aider pour connaire tous les champs d'une fenêtre ?
BLANC BLANC
|
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 2:41 PM |
Aie Aie Aie,
Merci mais je ne suis quand même pas bête à ce point.
Si tu lis mon précédent poste jusqu'au bout et pas uniquement le sujet, tu comprendras que la procédure de l'aide est incomplète afin de lister tous les champs d'une fenêtre qui contiendraient un onglet ou bien super champ.
Le but de la manœuvre serait de pouvoir lister tous les champs y compris ceux de l’onglet, bien sûr sans connaître à l'avance le nom de cet l'onglet, tu verras que ce n'est pas si évident qu'il n'y parait, d'autant plus que la propriété "..Type" ne fonctionne pas pour les super champs. Bref si un expert à s’est déjà cassé la tête sur ce problème qu’il me fasse signe je lui en serait que très reconnaissant.
En tout cas merci d'avoir suggéré
A blanc n'entendeur CHALUT |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 3:27 PM |
Peut-être en regroupant tous les champs dans un groupe, et en listant les champs du groupe...
Eric
"Alain Blanc" <ablanc@lasociete.com> a écrit dans le message de news: 443cd6b2$1@news.pcsoft.fr...
Aie Aie Aie,
Merci mais je ne suis quand même pas bête à ce point.
Si tu lis mon précédent poste jusqu'au bout et pas uniquement le sujet, tu comprendras que la procédure de l'aide est incomplète afin de lister tous les champs d'une fenêtre qui contiendraient un onglet ou bien super champ.
Le but de la manouvre serait de pouvoir lister tous les champs y compris ceux de l'onglet, bien sûr sans connaître à l'avance le nom de cet l'onglet, tu verras que ce n'est pas si évident qu'il n'y parait, d'autant plus que la propriété "..Type" ne fonctionne pas pour les super champs. Bref si un expert à s'est déjà cassé la tête sur ce problème qu'il me fasse signe je lui en serait que très reconnaissant.
En tout cas merci d'avoir suggéré
A blanc n'entendeur CHALUT
|
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 4:00 PM |
Une idée simple et excellente, comme quoi ...
Merci A+
PS : Finalement la propriété "..Type" fonctionne pour un super champs seulement avec les opérateurs d'indirection. Cette propriété utilisé directement on obtient l'erreur => Erreur :La propriété 'Type' n'existe pas sur ce type de champ. C'est quand même étrange tu me diras ???!!! NON ?
PS: J'ai quand même écris une procédure pour obtenir tous les champs d'une fenêtre, je l'a poste d'ici 10min, ça éviteras à de créer des groupes fictifs. |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 4:35 PM |
Bonjour,
J'imagine que tu es bien en WD10 ? Dans ce cas (même en WD9) la proprieté '..type' donne bien un code différent pour un super champ, c'est le "typeSuperChamp"
J'avais fait un bout de code en WD9 pour lister tous les champ d'une fenêtre (y compris les superChamp, les volets leurt contenu, les tables et les colonnes). Je ne garantis pas que ca marche dans 100% des cas mais dans ce cas je suis prêt a tenter de compléter.
En fait il faut aussi utiliser les fonctions EnumèreSousElément() et TableEnumèreColonne() pour tout récupérer
Si il y a des interressés, je pourrais mettre le source de la classe en question sur un ftp dès ce soir.
A+
-- Francis MOREL |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 4:36 PM |
Prenons cela comme une contribution poétique à ce problème. Si d'autres personnes peuvent completer cela, ce serait chouette.
J'ai une fenêtre avec un onglet, des boutons , un champ texte. l'onglet a deux pages, un sur chaque page un bouton. C'est vrai que ce n'est pas simple, et l'aide WIndev n'est pas claire du tout... N.B. Probleme aussi, je cable le nom de l'onglet, et je n'ai pas trouvé de propriétés indiquant que l'objet est un onglet.
i est un entier = 1 LngNbrePages est un entier ResChamp est une chaîne StrnomPage est une chaîne ResChamp = EnumèreChamp(FrmTest, i) Trace("Liste des objets de la fenêtres") WHILE ResChamp<>"" i++ Trace(ResChamp) ResChamp = EnumèreChamp(FrmTest, i) END Trace("Liste des nombre de pages de l'onglet")
//Ce code permet de récupérer le nombre d'onglets sNomChamp est une chaîne = EnumèreSousElément("FrmTest.Onglet1", enumPremier + enumVolet) // Parcours tous les champs TANTQUE sNomChamp <> "" // Passage au champ suivant Trace(sNomChamp) sNomChamp = EnumèreSousElément ("FrmTest.Onglet1", enumVolet) LngNbrePages=LngNbrePages+1 FIN Trace("Liste des objet des onglets")
POUR i=1 A LngNbrePages StrnomPage="FrmTest.Onglet1." + i Trace(TAB +StrnomPage) sNomChamp= EnumèreSousElément(StrnomPage, enumPremier + enumVolet) // Parcours tous les champs TANTQUE sNomChamp <> "" // Passage au champ suivant Trace(sNomChamp) sNomChamp = EnumèreSousElément (StrnomPage, enumVolet) FIN FIN
ON obtient:
Liste des objets de la fenêtres Onglet1 Bouton3 Saisie1 Bouton4 Liste des nombre de pages de l'onglet 1 2 Liste des objet des onglets <TAB>zaza2.Onglet1.1 Bouton1 <TAB>zaza2.Onglet1.2 Bouton2
Michel, Montréal |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:06 PM |
Dans son message précédent, Alain Blanc a écrit :
Une idée simple et excellente, comme quoi ...
Merci A+
PS : Finalement la propriété "..Type" fonctionne pour un super champs seulement avec les opérateurs d'indirection. Cette propriété utilisé directement on obtient l'erreur => Erreur :La propriété 'Type' n'existe pas sur ce type de champ. C'est quand même étrange tu me diras ???!!! NON ?
PS: J'ai quand même écris une procédure pour obtenir tous les champs d'une fenêtre, je l'a poste d'ici 10min, ça éviteras à de créer des groupes fictifs.
Question indiscrète? s'il y a une fentre interne, les champs de celle ci sont-ils listés? et si la fenetre interne provient d'un composant? Non pas taper sur la tête SVP :oÞ
-- Pascal N0.pascal.SPAM@efpe.biz Ne garder que le prénom pour me joindre |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:08 PM |
PROCEDURE ListeChamps(sParentAdresse est une chaîne)
nIndiceChamp est un entier = 1 sChampNom est une chaîne sChampAdresse est une chaîne nIndiceVoletMax est un entier nIndiceVolet est un entier
SI {sParentAdresse,indChamp}..Type = typOnglet ALORS //- L'objet parent est un onglet nIndiceVoletMax = {sParentAdresse,indChamp}..Occurrence POUR nIndiceVolet = 1 A nIndiceVoletMax sChampNom = EnumèreChamp({sParentAdresse,indChamp}[nIndiceVolet], nIndiceChamp) TANTQUE sChampNom <> "" nIndiceChamp ++ sChampAdresse = sParentAdresse + "." + sChampNom Trace(sChampAdresse) SI {sChampAdresse,indChamp}..Type _DANS_(typOnglet,typSuperChamp) ALORS ListeChamps(sChampAdresse) sChampNom = EnumèreChamp({sParentAdresse,indChamp}[nIndiceVolet], nIndiceChamp) FIN FIN SINON //- L'objet parent n'est pas un onglet sChampNom = EnumèreChamp(sParentAdresse, nIndiceChamp) TANTQUE sChampNom <> "" nIndiceChamp ++ sChampAdresse = sParentAdresse + "." + sChampNom Trace(sChampAdresse) SI {sChampAdresse,indChamp}..Type _DANS_(typOnglet,typSuperChamp) ALORS ListeChamps(sChampAdresse) sChampNom = EnumèreChamp(sParentAdresse, nIndiceChamp) FIN FIN
///- PS : SI j'ai différencié l'objet parent étant un onglet ou pas, c'est parce que pour les onglet il faut encore indiquer les volets entre []
A+ en espérant que ça puisse servir
BLANC BLANC |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:08 PM |
Salut,
Oui ça m'intéresse. Mais tu peux aussi regarder la procédure que j'ai écrite, mise à part qu'elle n'énumère pas le colonne d'une table, elle énumère tous les champs contenu dans le formulaire, sur chaque volet des évenutelles onglet, et les encapsulations infinies de super champs.
Mise à part ça, la propriété "..Type" fonctionne pour un super champs s'il est entre { } . Il est a noté aussi qu'il existe une constante "typSuperchamp" donc .... à mon humble avis c'est un léger bug du déboggeur .
A+ |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:12 PM |
Une version permettant d'utiliser la propriété Type de l'onglet. i est un entier = 1 LngTypeChamp est un entier LngNbrePages est un entier ResChamp est une chaîne StrnomPage est une chaîne sNomChamp est une chaîne ResChamp = EnumèreChamp(FrmEnumeTest, i) Trace("Liste des objets de la fenêtres") WHILE ResChamp<>"" i++ Trace(ResChamp+ " " + {{ResChamp}..NomComplet}..Type) LngTypeChamp= {{ResChamp}..NomComplet}..Type SI LngTypeChamp ALORS //Traitement des onglets sNomChamp = EnumèreSousElément({ResChamp}..NomComplet, enumPremier + enumVolet) //Je compte le nombre de pages dans les onglets TANTQUE sNomChamp <> "" sNomChamp = EnumèreSousElément ({ResChamp}..NomComplet, enumVolet) LngNbrePages=LngNbrePages+1 FIN POUR i=1 A LngNbrePages StrnomPage={ResChamp}..NomComplet + "." + i Trace("Objets de la page " + i + " de l'onglet "+{ResChamp}..NomComplet) //trace(tab +StrnomPage) sNomChamp= EnumèreSousElément(StrnomPage, enumPremier + enumVolet) // Parcours tous les champs TANTQUE sNomChamp <> "" // Passage au champ suivant Trace(sNomChamp) sNomChamp = EnumèreSousElément (StrnomPage, enumVolet) FIN FIN FIN ResChamp = EnumèreChamp(FrmEnumeTest, i) END
Michel, Montréal |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:18 PM |
Hello,
Regarde la procédure que je propose, à mon avis elle est complète. Avec elle tu n’as pas besoin de câbler le nom de l’onglet et tu peux avoir autant d’onglet encapsuler l’un dans l’autre puisque c’est une procédure récursive.
Il te suffit de la copier coller dans une collection de procédure globale, et de l’appeler avec le nom du formulaire comme paramètre.
A+
Alain Blanc |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:38 PM |
Hello,
hehehe, je viens de modifier ma procédure pour qu'il tienne en compte les fenêtres internes. Par contre je viens de m'appercevoir que plusieurs volets encapsuler ça ne marche pas . Eh oui il faut indiquer l'indice pour chaque volet enpasulé et là les opérateurs d'indirection ne peuvent pas venir à l'aide ((((.
Bref .....
en ce qui concerne les composants j'ai pas essayé ...
A+ |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:53 PM |
Bravo Alain !!
Mon code fait au moins le double du tien.
P.S. : si tu peux encore intégrer le code pour les colonnes d'une table...alors c'est le nirvana .
Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 6:33 PM |
Merci,
ça fait plaisir. Tu l'as testé ? Pour les colonnes d'une table je le ferais plus tard si tu me le rappelle hihihi
A+ |
| |
| |
| | | |
|
| | |
| |
Posted on April, 13 2006 - 1:59 PM |
Bonjour,
Désolé pour le retard de ma réponse, j'étais très pris ce matin. Concernant la classe et le module de test j'ai tous mis sur
http://home.tele2.fr/morel/download/enumfen200.zip et aussi http://wdmlist.free.fr/download/enumfen200.zip
Ca fait à peut près pareil que ta procédure, le principe est équivalent, j'ai juste traiter en plus les - les typBarreOutils, typBoîteAOutils, typFen ,typGrp - traiter les colonnes des tables Par contre je n'ai pas traiter non plus les composants. J'ai mis tout ca sous dans une classe avec une zone mémoire pour être réutilisable partout.
Bon dev. A+
-- Francis MOREL |
| |
| |
| | | |
|
| | |
| |
Posted on April, 13 2006 - 2:44 PM |
Francis MOREL a formulé ce jeudi :
Bonjour, Désolé pour le retard de ma réponse, j'étais très pris ce matin. Concernant la classe et le module de test j'ai tous mis sur http://home.tele2.fr/morel/download/enumfen200.zip et aussi http://wdmlist.free.fr/download/enumfen200.zipCa fait à peut près pareil que ta procédure, le principe est équivalent, j'ai juste traiter en plus les - les typBarreOutils, typBoîteAOutils, typFen ,typGrp - traiter les colonnes des tables Par contre je n'ai pas traiter non plus les composants. J'ai mis tout ca sous dans une classe avec une zone mémoire pour être réutilisable partout. Bon dev. A+
Merci de la contribution.
-- Pascal N0.pascal.SPAM@efpe.biz Ne garder que le prénom pour me joindre |
| |
| |
| | | |
|
| | | | |
| | |
|