PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • Présentation
  • Ouverture d'un volet d'onglet dynamique
  • Ouvrir un volet d'onglet via le bouton "+"
  • Ouvrir un volet d'onglet via la fonction OngletOuvre
  • Astuce : Proposer un volet "Menu" permettant à l'utilisateur de choisir le type de volet à créer
  • Manipuler un volet d'onglet dynamique
  • Changer le volet d'onglet dynamique actif
  • Connaître le libellé du volet d'onglet dynamique actif
  • Récupérer la fenêtre interne affichée dans un volet
  • Accéder au contenu de la fenêtre interne affichée dans un volet
  • Propriétés spécifiques aux champs Onglet
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
WINDEV permet de manipuler les champs Onglet dynamique par programmation grâce aux fonctions OngletXXX et à diverses propriétés du WLangage. Il est également possible de manipuler un champ Onglet dynamique directement par programmation. Il suffit d'utiliser directement la variable du champ Onglet dans le code.
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.
Remarque : Lorsque la fenêtre interne manipulée dans l’onglet dynamique utilise des fichiers de données HFSQL, il est important que la fenêtre interne utilise un contexte HFSQL indépendant.
Ouverture d'un volet d'onglet dynamique
Il est possible d'ouvrir un volet d'onglet dynamique de différentes façons :
  • via le bouton "+" du champ Onglet. Dans ce cas, les options précisées dans la fenêtre de description du champ Onglet sont prises en compte.
  • par programmation, via la fonction OngletOuvre.

Ouvrir un volet d'onglet via le bouton "+"

Pour ouvrir un volet d'onglet via le bouton "+" présent dans le champ Onglet :
  1. Dans la fenêtre de description du champ Onglet, onglet "Détail", cochez l'option "Avec bouton "Nouveau"" et indiquez la "Fenêtre interne en création" et le "Libellé par défaut du nouveau volet".Dans la fenêtre de description du champ Onglet, onglet "Détail", cochez l'option "Avec bouton "Nouveau" (+)" et indiquez la "Fenêtre interne sur bouton Nouveau (+)" et le "Libellé par défaut du nouveau volet".
  2. La fenêtre interne ouverte par le bouton "+" peut être :
    • une fenêtre interne spécifique (par exemple ajout d'une fiche client).
      Lorsque l'utilisateur cliquera sur le bouton "+", les volets d'onglet créés seront identiques, basés sur la même fenêtre interne.
      Remarque : Si la fenêtre interne attend des paramètres, il est nécessaire d'ouvrir le volet d'onglet par programmation avec la fonction OngletOuvre.
    • aucune fenêtre interne.
      Dans ce cas, il est nécessaire de préciser par programmation la fenêtre interne à ouvrir. Pour cela, il suffit d'utiliser la fonction OngletOuvre dans le traitement "Création d'un volet" du champ Onglet (voir le paragraphe Ouvrir un volet d'onglet via la fonction OngletOuvre).
Remarque : Le bouton "+" de l'onglet dynamique appelle automatiquement le traitement "Création d'un volet" du champ Onglet. Si ce traitement utilise la fonction OngletOuvre, ce traitement sera prioritaire sur la fenêtre interne spécifiée dans l'interface.

Ouvrir un volet d'onglet via la fonction OngletOuvre

Pour ouvrir un volet d'onglet, il est également possible d'utiliser la fonction OngletOuvre.
Cette fonction peut par exemple :
  • être utilisée dans un bouton pour ouvrir un volet d'onglet supplémentaire dans un champ Onglet.
  • être utilisé dans le traitement "Création d'un volet" du champ Onglet.
La fonction OngletOuvre permet de :
  • Connaître l'alias du volet d'onglet. Cet alias permet de manipuler le volet d'onglet par programmation. Cet alias peut également être connu par la propriété ..Valeur ou par la propriété ..Alias.
  • Spécifier le libellé du volet d'onglet.
  • Spécifier la fenêtre interne à ouvrir.
  • Passer des paramètres à la fenêtre interne à ouvrir.
Exemple :
Alias_Onglet est une chaîne
// Nouvel onglet affichant la fiche du client en cours
Alias_Onglet = OngletOuvre(ONG_Menu, "Client "+ Client.IDClient, FI_FicheClient, Client.IDClient)
// Modification de l'image du volet d'onglet
ONG_Menu[Alias_Onglet]..Image = "NvClient.png"

Astuce : Proposer un volet "Menu" permettant à l'utilisateur de choisir le type de volet à créer

Certaines interfaces peuvent proposer à l'utilisateur, lors du clic sur le bouton "+", un menu lui permettant de choisir le type d'information à afficher.
Pour réaliser ce type d'interface, il suffit de créer une fenêtre interne "Menu". Par exemple, cette fenêtre peut proposer à l'utilisateur d'afficher une fiche client, une facture ou la liste des commandes.
Dans ce cas, l'utilisateur choisit le type de volet d'onglet à créer et le volet d'onglet en cours est remplacé par le volet choisi.
Pour réaliser ce type d'interface, quelques adaptations sont nécessaires :
  • Dans le code de clic du bouton permettant de choisir le type de volet, il suffit d'utiliser la fonction ChangeFenêtreSource en utilisant la syntaxe :
    ChangeFenêtreSource(<Fenêtre interne de choix>, <Fenêtre interne de remplacement>)

    Par exemple :
    // Remplace la fenêtre de choix par une fiche
    ChangeFenêtreSource(FI_Choix, FI_Fiche)
  • Pour manipuler l'onglet ajouté, il suffit d'utiliser la syntaxe :
    <NomFenêtre>.<Nom Onglet>[<NomFenêtre>.<Nom Onglet>]

    Par exemple, pour modifier le libellé de l'onglet ouvert :
    FEN_DYNMAIN.ONG_MDI[FEN_DYNMAIN.ONG_MDI]..Libellé = "Fiche de " + HeureSys()
Manipuler un volet d'onglet dynamique
Pour manipuler un volet d'onglet dynamique, utilisez la syntaxe suivante :
NomChampOnglet[AliasDuVoletOnglet]..NomPropriété = ValeurPropriété
Par exemple :
ONG_MonOnglet[ONG_MonOnglet]..Etat = Grisé
Remarques :
  • La fonction VoletDuChamp permet de connaître le nom du volet dynamique (l'alias) affichant un champ spécifique.
    // Clic sur bouton "BTN_MAJ"
    MonVolet est un Champ
    MonVolet <- VoletDuChamp(MoiMême)
    MonVolet..Libellé = MonVolet..Libellé + " (Modifié)"
  • La fonction OngletEtat permet de connaître l'état d'un volet d'onglet dynamique : actif, flottant, inexistant.
  • Il est possible de connaître les alias des volets dynamiques ouverts avec la fonction EnumèreChamp utilisée sur le champ Onglet :
    // Remplir une combo avec la liste des champs de la fenêtre
    i est un entier = 1
    ResChamp est une chaîne
    ResChamp = EnumèreChamp(ONG_MonOnglet, i)
    TANTQUE ResChamp <> ""
    i++
    Trace(ResChamp)
    ResChamp = EnumèreChamp(ONG_MonOnglet, i)
    FIN
Changer le volet d'onglet dynamique actif
Par défaut, le dernier volet d'onglet dynamique créé est activé. Il est possible de changer l'onglet en cours par programmation.
Pour activer un volet d'onglet dynamique :
  • Affectez l'onglet avec l'alias du volet d'onglet dynamique à activer :
    NomChampOnglet = AliasDuVoletOnglet
  • Utilisez la propriété ..Valeur.
Rappel : Pour activer un volet d'onglet statique, il suffit d'indiquer le numéro du volet à activer.
NomChampOnglet = NumVolet
Connaître le libellé du volet d'onglet dynamique actif
Pour récupérer le libellé de l'onglet actif, il suffit d'utiliser la propriété ..Libellé sur le volet d'onglet (identifié par son alias) :
Par exemple :
AliasOnglet1 est une chaîne = OngletOuvre(ONG_Test, "Mon onglet 1", "FI_FenêtreInterne")
Trace(ONG_Test[AliasOnglet1]..Libellé)
La propriété ..Libellé permet également de modifier le libellé du volet d'onglet.
Récupérer la fenêtre interne affichée dans un volet
Pour récupérer le nom de la fenêtre interne affichée dans un volet dynamique, il est possible d'utiliser le code suivant :
// Récupère le volet affiché
oFenInterne est un Champ <- ONG_Test[AliasVolet1]

// Récupère la fenêtre interne associée au volet
sNomFenêtreInterne est une chaîne
sNomFenêtreInterne = EnumèreChamp(oFenInterne, 1, parOrdreDeCréation)
Accéder au contenu de la fenêtre interne affichée dans un volet
Pour accéder à la valeur d'un champ ou d'une variable de la fenêtre interne affichée dans un volet dynamique, il est possible d'utiliser les opérateurs d'indirection :
// Récupère la valeur d'un champ de la fenêtre interne
Info({AliasVolet1 + ".NomChamp", indChamp})

// Récupère la valeur d'une variable de la fenêtre interne
Info({AliasVolet1 + ".NomVariable", indVariable})

// Appel une procédure de la fenêtre interne
ExécuteTraitement(AliasVolet1 + ".pNomProcédure", trtProcédure)

// Equivalent à :
MaProcédure est une Procédure = gsAlias_Onglet + ".pNomProcédure"
MaProcédure()
L'utilisation de procédures locales à la fenêtre pour manipuler ses champs doit être préférée à l'accès direct aux champs et variables par indirection. Cela permet de garder la fenêtre interne autonome et facilite la maintenance.
Propriétés spécifiques aux champs Onglet
Les propriétés suivantes sont spécifiques à la gestion des caractéristiques d'un champ Onglet dynamique par programmation.
Versions 20 et supérieures
AvecBoutonFermeture
Nouveauté 20
AvecBoutonFermeture
AvecBoutonFermeture
La propriété ..AvecBoutonFermeture permet de :
  • Savoir si tous les volets d'un onglet dynamique possèdent une croix de fermeture.
  • Configurer tous les volets d'un onglet dynamique pour afficher une croix de fermeture.
Versions 20 et supérieures
AvecBoutonNouveau
Nouveauté 20
AvecBoutonNouveau
AvecBoutonNouveau
La propriété ..AvecBoutonNouveau permet de :
  • Savoir si un champ Onglet dynamique propose une croix d'ajout.
  • Configurer un champ Onglet dynamique pour proposer ou non une croix d'ajout.
Versions 20 et supérieures
FenêtreSiNouveau
Nouveauté 20
FenêtreSiNouveau
FenêtreSiNouveau
La propriété ..FenêtreSiNouveau permet de connaître et de modifier le nom de la fenêtre interne à ouvrir si l'utilisateur final ouvre un nouveau volet dans un champ Onglet dynamique.
Versions 20 et supérieures
LibelléSiNouveau
Nouveauté 20
LibelléSiNouveau
LibelléSiNouveau
La propriété ..LibelléSiNouveau permet de connaître et de modifier le libellé du nouveau volet ouvert par l'utilisateur final dans un champ Onglet dynamique.
Versions 20 et supérieures
MémoriserLaConfiguration
MémoriserLaConfiguration
La propriété ..MémoriserLaConfiguration permet de :
  • Savoir si la configuration des volets d'un champ Onglet dynamique est automatiquement sauvée et restaurée.
  • Modifier la configuration des volets d'un champ Onglet dynamique pour qu'elle soit automatiquement sauvée et restaurée ou non.
Versions 20 et supérieures
OngletDynamique
Nouveauté 20
OngletDynamique
OngletDynamique
La propriété ..OngletDynamique permet de :
  • Connaître le type d'un champ Onglet (onglet statique ou onglet dynamique).
  • Modifier le type d'un champ Onglet (onglet statique ou onglet dynamique).
Versions 20 et supérieures
VoletDétachable
Nouveauté 20
VoletDétachable
VoletDétachable
La propriété ..VoletDétachable permet de :
  • Savoir si les volets d'un champ Onglet dynamique peuvent être sortis de la fenêtre par l'utilisateur final.
  • Autoriser ou non les volets d'un champ Onglet dynamique à être sortis de la fenêtre par l'utilisateur final.
Pour connaître la liste complète des propriétés du WLangage pouvant être utilisées avec un champ de type Onglet, consultez Propriétés associées à un champ Onglet.
Liste des exemples associés :
WD Multi-Fenetrage Exemples didactiques (WINDEV) : WD Multi-Fenetrage
[ + ] Cet exemple permet de comprendre les bases de la gestion du Multi-fenêtrage et des onglets dynamiques avec WINDEV.

Cet exemple présente une interface simple de gestion de fiches client sous deux formes :
- multi fenêtrée avec une interface MDI,
- multi onglets avec un champ onglet dynamique.
Version minimum requise
  • Version 20
Commentaires
Execution de procédure de la fenêtre interne d'un onglet dynamique
Si executeTraitement retourne le message l'objet '' est inconnu, il est possible d'utiliser le type Procédure.
Ainsi pour appeller la procédure enregistre de la fenetre interne :

maProc est une Procédure
maProc = "FEN_CLIENT.ONGLET_ENV.ALIAS_1.enregistre"
maProc(param)


Pour récupérer le nom complet de la fenêtre interne, aidez-vous d'un

Trace(MoiMême..NomComplet)

dans le code d'initialisation de la fenêtre interne
Guillaume P.
21 mar. 2018