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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Onglet dynamique + fenêtre interne + table [WD21]


Sujet :

WinDev

  1. #1
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut Onglet dynamique + fenêtre interne + table
    Bonjour à tous,

    mal de tête en perspective pour moi. J'essaye d'exécuter un TableAffiche(tablefic) sur une table contenue dans une fenêtre interne dans un onglet dynamique.

    La question est simple : comment accéder à cette *-/+*\- de table depuis une autre fenêtre ?

    Merci pour vos lumières.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 90
    Points
    90
    Par défaut
    Salut,

    Je me suis déjà battu avec les onglets dynamiques...

    Est-ce que tu peux nous éclairer sur ce que tu veux concrètement faire ?
    En général, le TableAffiche est utilisé pour actualiser le contenu de la table (après modification de la base, par exemple). Souhaites-tu appeler cette fonction dans un autre dessein ?
    Est-ce que l'accès (le TableAffiche, je suppose) que tu souhaites faire se fait depuis une fenêtre interne ouverte dans un autre onglet, ou est-ce que c'est à partir d'une fenêtre indépendante des onglets ?

    Je suis arrivé à rafraîchir une table d'une FI via ce code.
    1/ La table concernée est contenue dans l'onglet initial (donc pas un onglet ajouté)
    2/ La table est contenue dans un FI qui est elle-même contenue dans un champ fenêtre interne
    3/ La table est rafraichie lorsque j'applique des modifications dans le fichier sur laquelle elle est basée. Ces modifications sont faites dans un onglet qui a été précédemment ouvert.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // On raffraichit la table du 1er volet
    TableAffiche(FEN_XX.ONG_PP.CFI_YY.TABLE_TT,taCourantEnreg)
    FEN_XX : le nom de la fenêtre qui contient le champ onglet
    ONG_PP : le nom du champ onglet
    CFI_YY : le nom du champ interne (qui est mappé à la fenêtre interne qui contient la table)
    TABLE_TT : le nom de la table dans la fenêtre interne

    X.

  3. #3
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonsoir Xavier,

    Merci pour ta réponse.

    je n'ai pas été précis, mais tu as deviné. J'ai ma fenêtre principale, dans laquelle il y a un onglet dynamique (tableau de bord). Lorsque l'on veut un nouvel onglet, on fait bien sûr un + et on clique sur un des boutons pour savoir ce que l'on veut afficher dans cet onglet (factures en retard, interventions à faire, contact client, etc...), tous on en commun d'être en gros une table contenue dans une fenêtre interne.

    Donc, lorsque je fais une modif dans une fiche contact client, je veux pouvoir rafraîchir le contenu de la table...

    Je testerai ton code lundi matin.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bon, petit test vite fait, et il n'aime pas du tout la référence au champ fenêtre interne.
    Je fais un test "en dur" : je crée 2 onglets sur ma fenêtre principale. L'onglet qui m'intéresse est le 2ème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    i est un entier = 1
    ResChamp est une chaîne
    ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord, i)
    TANTQUE ResChamp <> ""
    	i++
    	Trace(FEN_principale.OngletDynamique_TableauDeBord[ResChamp]..Alias + TAB + FEN_principale.OngletDynamique_TableauDeBord[ResChamp]..Nom)
    	ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord, i)
    FIN
    i--
    NomVolet est chaîne = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord, i)
    i=1
    ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[NomVolet], i)
    TANTQUE ResChamp <> ""
    	i++
    	Trace(ResChamp)
    	ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[NomVolet], i)
    FIN
    Première boucle, dans le trace, j'ai bien les 2 onglets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALIAS_1<TAB>OngletDynamique_TableauDeBord[1]
    ALIAS_2<TAB>OngletDynamique_TableauDeBord[2]
    Je me positionne sur l'onglet n°2 (i--) et j'essaye d'énumérer les éléments : il ne me trouve qu'un élément : Le champ FI_NouvelOnglet.

    Après, je suis perdu. Même en passant par des indirections, il se vautre lamentablement. Si quelqu'un a déjà tripatouillé, je suis preneur...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Je suis en version 18, donc aucune expérience des onglets dynamiques.

    Si je vous lis bien, la hiérarchie est la suivante :
    onglet dynamique => champ fenêtre interne, soit dans votre cas "Le champ FI_NouvelOnglet" => fenêtre interne => table.

    Et donc, le résultat obtenu semble normal.
    Vous énumérez tous les champs (en fait le seul) de votre onglet, soit le champ fenêtre interne, et il faudrait encore descendre de niveau dans votre exploration, pour connaître les champs du champ fenêtre interne, puis de la fenêtre interne finale contenant la table.

    Hemgé

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour Hemgé,

    Merci d'essayer de te pencher sur mon pb.

    Oui, effectivement, c'est ça le problème : comment faire pour descendre d'un niveau : passer à la fenêtre interne FI_ContactClient qui est contenue dans dans le champ FI_NouvelOnglet. A partir de la, je pourrais (conditionnel et non futur) savoir si c'est le bon onglet, si je pouvais utiliser le ..FenêtreSource. Mais bien sûr, je ne trouve pas de syntaxe qui va bien.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Quand tu fais : Trace(FEN_principale.OngletDynamique_TableauDeBord[ResChamp]..Alias + TAB + FEN_principale.OngletDynamique_TableauDeBord[ResChamp]..Nom )
    Le programme t'affiche : ALIAS_1<TAB>OngletDynamique_TableauDeBord[1]

    ???

    C'est plutôt bizarre. J'aurais préféré qu'il affiche OngletDynamique_TableauDeBord_1 par exemple. Les crochets [] m'embêtent un peu.

    Ensuite, en ligne 12, tu fais : ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[NomVolet], i)
    NomVolet étant une chaine, ça paraît bizarre là aussi.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Merci pour ta contribution à mon mal de crâne.

    Bah oui, c'est très étrange.
    Le NomVolet est une chaîne car c'est un onglet dynamique. Il semble que ça soit dans l'idée des tableaux associatifs.

    Par contre, je ne vois pas du tout commence "attaquer" le contenu de la fenêtre interne. Et là, je sèche lamentablement.

    EDIT : Je viens de voir qu'il existe EnumereSousElement. Je regarde ça dès que j'ai 5 minutes.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  9. #9
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Tout d'abord, dans votre test :

    La ligne 10 ramène Nom_Volet = ALIAS_2
    La ligne 12 équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[ALIAS_2], 1)
    ET la ligne 16 équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[ALIAS_2], 2)
    Ce qui ne peut pas fonctionner, puisqu'il n'y a qu'un champ dans cet onglet, le champ FI_NouvelOnglet.

    Et ensuite, pour rencontrer votre problème,comme je le proposais dans mon message précédent, je crois qu'il faut continuer à creuser les niveaux.

    Il faut avoir encore deux niveaux supplémentaires :
    Un pour la fenêtre interne contenue dans le champ fenêtre interne FI_NouvelOnglet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FenêtreInterne = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[ALIAS_2].FI_NouvelOnglet, 1)
    Le suivant pour les champs (dans les faits, le champ unique TableCible) contenu dans cette fenêtre interne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableCible = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[ALIAS_2].FI_NouvelOnglet.FenêtreInterne , 1)
    Maintenant, je suppose que le nom de la fenêtre interne et de la table sont fixés par programmation en fonction du type de traitement demandé.
    Les deux dernières énumérations ne sont alors pas nécessaires, mais je suppose que dans l'application, vous n'énumérez pas au-delà des onglets dynamiques et que ce n'est que dans le cadre de la résolution du problème que vous le faites.

    Donc, sauf erreur de ma part, il faut un nom à 4 composants, dont finalement l'alias de l'onglet dynamique n'est pas connu.
    Ensuite,vient le couple fenêtre interne - table finale, qui devrait être aisément connu.

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Quand tu fais : Trace(FEN_principale.OngletDynamique_TableauDeBord[ResChamp]..Alias + TAB + FEN_principale.OngletDynamique_TableauDeBord[ResChamp]..Nom )
    Le programme t'affiche : ALIAS_1<TAB>OngletDynamique_TableauDeBord[1]

    ???

    C'est plutôt bizarre. J'aurais préféré qu'il affiche OngletDynamique_TableauDeBord_1 par exemple. Les crochets [] m'embêtent un peu.
    En fait cela correspond à la doc.
    Il s'agit en quelque sorte de l'indice, mais dans l'esprit d'un tableau asociatif avec une clé de type chaîne.

    Citation Envoyé par tbc92 Voir le message
    Ensuite, en ligne 12, tu fais : ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[NomVolet], i)
    NomVolet étant une chaine, ça paraît bizarre là aussi.
    Idem et les exemples de la doc concordent.

    Commentaire sous réserve : toujours en version 18, je ne dispose pas des onglets dynamiques.

  11. #11
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour Hemgé,

    merci pour ta réponse. Effectivement, tes 2 équivalences de codes sont presque correctes (il manque les guillemets):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResChamp = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord["ALIAS_2"], 1)
    Bon, sur cette partie, ce n'est pas important de connaître le nom de l'alias de l'onglet concerné. Je pensais parcourir tous les onglets et si je trouve un onglet avec la table contact clients, rafraîchir le contenu. Dans l'absolu, il se peut que l'utilisateur ait ouvert plusieurs fois un onglet contact client.

    Pour l'accès, au niveau supplémentaire, ben, ça marche pô : erreur directe de l'EDI qui me met en rouge la partie concernat la FI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FenêtreInterne = EnumèreChamp(FEN_principale.OngletDynamique_TableauDeBord[ALIAS_2].FI_NouvelOnglet, 1)
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Bon, alors il reste EnumèreSousElément.

    La doc précise :
    Énumération des volets des onglets
    Par défaut, la fonction EnumèreSousElement utilisée sur un onglet énumère tous les champs de tous les volets sans faire apparaître le volet.
    En précisant la constante enumVolet, la fonction EnumèreSousElement utilisée sur un onglet énumère tous les onglets (mais pas les champs contenus dans les onglets). Le résultat obtenu est du type "<n>" où <n> est le numéro de l'onglet. Pour obtenir le libellé de l'onglet, utilisez la propriété ..Libellé.

    Pour énumérer les champs de chaque volet, il faut relancer une énumération sur le volet à partir de son numéro :

    EnumèreSousElement("<fenêtre>.<onglet>.<n>")

    Remarque : La propriété ..Occurrence permet de connaître le nombre de volets d'un onglet.
    La doc fournit aussi un exemple.

    Ceci peut peut-être constituer une piste, avec le bémol que cette doc a été rédigée quand les onglets dynamiques n'existaient pas encore.

    Et, comme par hasard, en poursuivant mon autoformation sur les onglets dynamiques (que ma version 18 n'offre pas ), je trouve dans la doc
    - sur OngletDynamique (Propriété) (voir Remarques)
    l'opérateur [] sur l'onglet doit être appelé avec l'alias du volet.
    - sur Manipuler un onglet dynamique par programmation (ce qui répond ux interrogations de tbc92)
    Attention : Les volets d'onglet statiques et les volets d'onglet dynamiques ne sont pas identifiés de la même manière :
    les volets d'onglet statiques sont identifiés par le numéro du volet actif.
    les volets d'onglet dynamiques sont identifiés par l'alias du volet actif.
    Donc, fin des spéculations, cela ne fonctionnera pas avec le n°.

    Bon, je n'ai pas le temps de poursuivre et sans pouvoir tester, c'est compliqué, mais je note que tous les exemples se basent sur l'onglet actif.
    Alors, activer le volet avant de tenter de l'explorer ?

  13. #13
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je pense finalement que tu devrais me remercier. En effet grâce à moi, tu t'autoformes. Bientôt tu seras un roi de la chiromancie.

    Trêve de plaisanteries. Juste pour dire que ça reste toujours bloqué au nom de ma fenêtre "FI_NouvelOnglet". Malheureusement, je ne vois pas comment contourner le pb. Bon c'est pas urgent (j'ai mis un bouton rafraîchie dans la fenêtre interne) . C'est juste que je trouvais ça "sexy" de faire cette interaction.

    Merci pour ton aide
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  14. #14
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    En bricolant un peu votre code à la sauvage dans une fenêtre de test j'ai réussi à exécuter le tableaffiche sans avoir de message d'erreur (avec une table vide par contre ...)
    Je vous laisse adapter le code pour correspondre à vos variable et essayer ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    i, j 		sont des entier 
    Champs 		est chaîne
    FenInterne 	est chaîne
    Onglet 		est une chaîne
     
    i = 1
    Onglet = EnumèreChamp(FEN_SansNom2.OngletDynamique_TableauDeBord, i)
    TANTQUE Onglet <> ""
     
     Trace(FEN_SansNom2.OngletDynamique_TableauDeBord[Onglet]..Alias + TAB + FEN_SansNom2.OngletDynamique_TableauDeBord[Onglet]..Nom)
     
     FenInterne =  EnumèreChamp(FEN_SansNom2.OngletDynamique_TableauDeBord[Onglet], 1)
     SI FenInterne <> "" ALORS
      Trace(">>"+FenInterne)
     
      j = 1
      Champs = EnumèreChamp(FEN_SansNom2.OngletDynamique_TableauDeBord[Onglet]..Alias + "." + FenInterne, j)
      TANTQUE Champs <> ""
     
       Trace(">>>>"+Champs)
     
       SI Champs = "TABLE_SansNom1" ALORS
        TableAffiche(FEN_SansNom2.OngletDynamique_TableauDeBord[Onglet]..Alias + "." + FenInterne + "." + Champs)
       FIN
     
       j++
       Champs = EnumèreChamp(FEN_SansNom2.OngletDynamique_TableauDeBord[Onglet]..Alias + "." + FenInterne, j)
      FIN 
     FIN
     
     i++
     Onglet = EnumèreChamp(FEN_SansNom2.OngletDynamique_TableauDeBord, i)
    FIN

  15. #15
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Merci pour ton bout de code Themayu. Je n'ai pas regardé mais, tu as trouvé là où je me suis vautré : il faut utiliser les alias... ou contourner..

    Mon collègue a trouvé un moyen :

    Dans la fenêtre principale, il a mis un bouton (invisible). L'alias de l'onglet est modifié à la création : on le nomme "Contact client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SI OngletEtat(OngletDynamique_TableauDeBord, "Contact Client") = Inexistant ALORS
    	RETOUR
    FIN
     
    sChamp est une chaîne
    sChamp = "OngletDynamique_TableauDeBord." + "Contact Client" + ".BTN_Appliquer"
    SI ChampExiste(sChamp) ALORS
    	ExécuteTraitement(sChamp, trtClic)
    FIN
    Dans le bouton "BTN_Appliquer", un simple "tableaffiche(...)"

    Merci pour vos contributions.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  16. #16
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    je viens apporté ma pierre à l'édifice.
    La solution viens du RAD onglets dynamique de WD21 que je trouve assez élégante. Elle est basé sur un système de notification et callback.

    Dans une collection de procédure globales:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    gtaCallBack est un tableau associatif (AvecDoublon) de Procédure
     
    PROCEDURE DeclareProcedureNotification(sNotification est une chaîne, pCallBack est une Procédure)
    gtaCallBack[sNotification]=pCallBack
     
    PROCEDURE Notifie(sNotification est une chaîne, sParametre="")
     
    POUR i=1 _A_ gtaCallBack[sNotification]..Occurrence
    	pCallBack est un Procédure<-gtaCallBack[sNotification,i]
    	pCallBack(sParametre)
    FIN
    Ensuite sur l'ouverture de l'onglet/FI devant être rafraîchie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DeclareProcedureNotification("Modif.Immo",SurModification)
     
    	PROCEDURE INTERNE SurModification(sParametre)
    		SI sParametre=Immo.IDImmo ALORS
    			HLitRecherche(Immo,IDImmo,Immo.IDImmo)
    			FichierVersEcran()
    		FIN
    	FIN
    Et enfin sur la FI qui fait la modif un petit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notifie("Modif.Immo",gId)
    Comme cela, pas besoin de s'embêter avec des alias, peut importe si un onglet est ouvert plusieurs fois...
    Système simple et efficace. On peut évidement aussi faire plusieur notifications différentes par FI (ex: Ajout, modif, suppression)

  17. #17
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Merci pour ta contribution Yoshi570.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] Fenêtre interne + onglet dynamique + champ arbre
    Par xavier.ninane dans le forum WinDev
    Réponses: 19
    Dernier message: 03/01/2016, 13h09
  2. Réponses: 1
    Dernier message: 03/08/2015, 10h46
  3. [WD18] ChampClone, onglets, ascenseurs et fenêtre interne
    Par Khyinn dans le forum WinDev
    Réponses: 2
    Dernier message: 13/12/2014, 18h33
  4. [WD16] Fenêtre interne - Enumération des champs d'un onglet
    Par Ry_Yo dans le forum WinDev
    Réponses: 7
    Dernier message: 12/11/2012, 15h19
  5. [WD14] Fenêtres internes, onglets, plans
    Par Thanor dans le forum WinDev
    Réponses: 9
    Dernier message: 29/09/2010, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo