PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → changement/ouvertire d'onglet dynamique
changement/ouvertire d'onglet dynamique
Iniciado por JVE, 12,sep. 2019 16:57 - 8 respuestas
Miembro registrado
48 mensajes
Publicado el 12,septiembre 2019 - 16:57
Bonjour

J'ai une fenêtre avec 3 onglets dynamiques. Je souhaiterais après clic sur un bouton et traitement par programmation de passer (se positionner) sur le 2ème onglet. Quelle commande permet de faire cette manipulation?

Merci pour votre aide
Miembro registrado
4.361 mensajes
Publicado el 12,septiembre 2019 - 18:29
Bonjour,
S'agit-il de 3 champs onglets dynamique, ou d'un champ onglet dynamique à 3 volets ?
Dans le 2° cas, Il suffit de récupérer l'Alias du 2° volet et de le passer en affectation au champ
https://doc.pcsoft.fr/fr-FR/?1013303

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 12,septiembre 2019 - 18:58
Miembro registrado
48 mensajes
Publicado el 19,septiembre 2019 - 11:48
Bonjour

Il s'agit de 3 onglets créés dans une fenêtre (et non créés par programmation). En fait peut être qu'ils correspondent à des onglets statiques :




Je n'arrive pas à comprendre à quoi correspond l'alias du 2ème onglet. Ou le trouver (il ne correspond pas au titre de l'onglet? Faut il le programmer dans le code?

J'ai vu aussi qui pourrait y avoir la fonction "DonneFocus" mais je reste bloquer sur cette définition de l'alias.

Merci pour votre aide
Miembro registrado
4.361 mensajes
Publicado el 19,septiembre 2019 - 14:00
Il s'agit donc de volet.
Avant de continuer, une peu de vocabulaire.
Il ne faut pas confondre le champ onglet (ou onglet) et le volet d'un champ onglet (ou volet) que l'utilisateur appelle communément onglet.




Les volets statiques sont créés comme on le ferait dans un onglet statique, les onglets dynamique ont besoin d'une fenêtre interne.

Dans un onglet statique, l'accès à un volet se fait via son indice :
ONG_BOM=2

permet d'activer le 2° volet du champ ONG_BOM.

En ce qui concerne les onglets dynamiques le fonctionnement est différents, il faut passer par des alias. (par définition, l'onglet est dynamique, donc on ne peut pas le référencer avec des données "fixes")
Ces alias sont créés automatiquement lors de l'initialisation du volet. Il est possible de les modifier, on pourra éventuellement développer ce sujet ultérieurement.
Les alias sont des chaines. De la même manière qu'il y a des volets statiques et des volets dynamiques, il y a des nom d'alias par défaut statique et dynamique. Les alias des volets statiques sont de la forme ALIAS_S_n, ceux des onglets dynamique de la forme ALIAS_n où n est l'ordre de création/initialisation du volet.

Dans le cas qui nous concerne, afin d'activer le deuxième onglet (qui est à priori un onglet statique), il suffit d'ajouter :
ONG_BOM="ALIAS_S_2"


--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
48 mensajes
Publicado el 19,septiembre 2019 - 14:05
Merci beaucoup
Miembro registrado
48 mensajes
Publicado el 25,septiembre 2019 - 14:22
Bonjour,

Dans le cas des onglets statiques j'ai utilisé la fonction DonneFocus en activant un élément contenu sur l'onglet statique en question.

Concernant les onglets dynamiques, j'ai des difficultés à appréhender le sujet.
Mon code réalise les opérations suivantes :
a. une fois les données d'un fichier excel écrites dans une table sur un onglet statique
b. création d'un rapport sur un onglet dynamique avec un nom formaté (voir code ci dessous). L'utilisateur peut le fermer cet onglet.
c. remplissage de champs liés un la fenetre interne utilisée pour la création des onglets dynamique





1. Je souhaiterais vérifier si le rapport n'a pas déjà été créé (vérification sur le nom de l'onglet dynamique) afin de mettre un message et d'éviter en créer 2.
2. Lors de la création de l'onglet dynamique suivant (après le premier et les suivants), les chamsps de la fenetre interne sont vides sur les rapports 2, 3, etc... Comment faire pour écrire correctement ces valeurs (j'utilise <nom fenetre interne>.<Nom champs>) ou initialiser les valeurs et écrire des valeurs différentes réactualisées sur chaque nouveau rapport ou onglet dynamique?

__________________________________________________________________________________________________________
// émission rapport sur nouvel onglet dynamique
OngletOuvre(ONG_PRINCIPAL,"RAPPORT "+SAI_Projet+" - Item "+SAI_Item,FI_Rapport)

FI_Rapport.SAI_No_Affaire=Droite(SAI_Projet,nBcaractprojet)+SansEspace(SAI_Item)
FI_Rapport.SAI_Revision=SAI_Revision
FI_Rapport.SAI_NB_Lignes_traitées=TableOccurrence(TABLE_BOM_ORIGINE)


FI_Rapport.SAI_Lignes_Ajoutées_A=nb_A
FI_Rapport.SAI_Lignes_avec_Quantités_Modifiées_Q=nb_Q
FI_Rapport.SAI_Lignes_Modifiées_M=nb_M
FI_Rapport.SAI_Lignes_Supprimées_S=nb_S


DonneFocus(FEN_PRINCIPALE.TABLE_BOM_ORIGINE)
_____________________________________________________________________________________________________
Miembro registrado
4.361 mensajes
Publicado el 26,septiembre 2019 - 08:19
Il faut créer ta FI de manière à ce qu'elle prenne des paramètres. Cela se fait dans l'initialisation de la fenêtre, comme dans une fenêtre classique.
Il suffit alors de passer les paramètres dans la fonction OuvreOnglet
Une chose élégante serait de passer en paramètre une structure et de lier les champ de la FI à cette structure, comme ion le ferait avec une table fichier

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 26,septiembre 2019 - 08:24
Miembro registrado
4.361 mensajes
Publicado el 26,septiembre 2019 - 09:56
Je développe un peu.
Dans le code d'initialisation du projet (on ne paut pas le mettre ailleurs car on va en vaoir besoin dans plusieurs fenêtres)
STDonnéesRapport est structure
m_sNoAffaire est une chaîne
m_nRévision est un entier
m_nLignesTraitées est un entier
m_nLignesAjoutées est un entier
m_nQtéModifiées est un entier
m_nLignesModifiées est un entier
m_nLignesSupprimées est entier
FIN

Code d'initialisation de la fenêtre :
Procedure FI_Rapport(gstInitialisation est STDonnéesRapport)
SourceVersEcran()


Liaison des champs de la FI :




Création de l'onglet dynamique :
stInit_FI est STDonnéesRapport

stInit_FI:m_sNoAffaire=Droite(SAI_Projet,nBcaractprojet)+SansEspace(SAI_Item)
//...

OngletOuvre(ONG_PRINCIPAL,"RAPPORT "+SAI_Projet+" - Item "+SAI_Item,FI_Rapport,stInit_FI)


--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
48 mensajes
Publicado el 27,septiembre 2019 - 13:45
Merci beaucoup