Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

masquer un vi

Résolu !
Accéder à la solution

Bonjour,

 

Je réalise une application avec plusieurs vi. La fenêtre principale est un menu avec des boutons, et chaque bouton appelle un vi différent. Lorsque j'affiche un sous-vi, je souhaiterais pouvoir masquer (ou fermer) le menu. Est-ce possible ? et si oui, comment ?

 

Merci d'avance

Ln

0 Compliments
Message 1 sur 17
4 398 Visites

Bonjour,

 

Je vous ai justement isolé une partie du code que je suis entrain de faire. Sur ce code il y a 2 boutons "oscillo" qui ouvre un vi d'oscilloscope et 'historisque" qui ouvre un vi de relecture de fichier. 

 Donc mise à part les erreurs du aux vi manquants, ce code fonctoinne.

Ce code permet d'ouvrir un Vi2 en fermant le Vi1 précédent. point de vue de la face avant. ( attention lorsque vous naviguer du vi1 au vi2 avec ce code vous fermer completement le vi1 ce n'est pas un simple masquage.)

 

Salutations,  

Message Edité par NoCtaRiS le 05-14-2009 10:48 AM
0 Compliments
Message 2 sur 17
4 394 Visites

Bonjour,

Tout d’abord, merci pour votre aide, mais il me reste un problème avec la fermeture des VI.

 

Mon projet se décompose en plusieurs VI. Un menu (Menu.vi) appelle les sous-vi à l’appui sur les boutons associés. Les sous-vi ont ensuite les boutons :

« précédent », qui affiche le VI précédent ;

« suivant », qui affiche le VI suivant ;

« Menu », qui affiche Menu.vi.

 

J’ai clos les VI avec un « invoke node » et la méthode « Front Panel close » suivi d’un « close reference », mais je pense que le VI est mal fermé puisque quand je retourne sur le menu, quand j’appuie de nouveau sur le bouton correspondant au VI que je viens de fermer, cela fait planter le vi (il ne répond plus). Ai-je oublié quelque chose ?

 

De plus, malgré le fait d’avoir clos mes VI, je ne peux pas appeler plusieurs fois le même VI. Labview m’affiche l’erreur suivante : « You cannot use « Menu.vi » recursively ». Comment dois-je procéder alors pour appeler le menu dans chacun des sous-vi lorsque l’utilisateur clique sur le bouton Menu ? et je dois procéder de la même manière pour les boutons « précédent » et « suivant ». Je ne peux pas garder les VI en arrière plan, sinon, ça entrainerait des risques de mauvaise utilisation.

 

Je travaille sous Labview 8.0, et je ne peux pas changer de version (demande client).

Merci d’avance.

0 Compliments
Message 3 sur 17
4 359 Visites

bonjour,

moi je travaille avec la version 8.2 ( les maj sont trop honéreuses en ce moment).

Sinon pourriez vous poster votre code pour que je  puisse voir si une erreur ne s'est pas glissée ? ( cotre vi menu et aussi un vi précédent et un vi suivant).

Je connais une éventuelle solution dites "barbares" à conditoin que les vi que appeller sont principalement de l'affichage sans calcul.( si caculs il y a, il faudra les placer dans un sous vi.)

Au lieu d'ouvrir et fermer les vi, crée une commande à onglets où vous placer votre affichage du menu.vi puis sur les autres pages de la commande à onglet l'affichage d'autres vi. 

Biensure un petit code de navigation entre page sera nécessaire pour aller d'une page à l'autre. Sachant que que l'utilisateur ne doit pas pouvoir naviguer de lui même d'une page à l'autre, il suffit de créer une d'une commande à onglet plus grande que la fenêtre d'affichage. 

Cette une solution que je qualifie de "barbare" mais qui fonctoinne, l'inconvénient principal c'est que vous risquer d'avoir un gros vi avec beaucoup de chose dedans qui va falloir ordonnée minusieusement.

Puis une fois terminer vous pourrez toujours découper le code en plusieurs sous vi en passant de l'un à l'autre avec des valeurs globales pour aller le vi principale.

 

Salutations, 

Message Edité par NoCtaRiS le 05-20-2009 02:04 AM
0 Compliments
Message 4 sur 17
4 324 Visites

J'utilise une technique qui utilise plus de mémoire vive. Lorsque j'ai plusieurs VI auxquels je veux accéder en tout temps et que je désire me promener de l'un à l'autre alors je les démarre tous par référence, sauf le VI principal, en spécifiant FP.State = hidden (désolé j'utilise une version anglaise). Je transmets par référence à chacun de ces VI les références des autres VI. Chacun de ces VI a toujours les deux booléens Hidden (action = cacher le VI) et Front (mettre l'état du front panel à standard et en avant plan).

 

Dans votre cas si je suis dans un VI (VI1 par exemple) et que je désire retourner au VI menu:

 

1) je passe par référence au VI menu le booléen FRONT =TRUE (le VI menu n'est plus caché et il est mis en avant plan);

2) je mets le booléen HIDDEN du VI1 à TRUE (le VI1 se retrouvé caché).

 

Je ferme uniquement mes références lorsqu'un VI se termine.

 

J'espère que cela peut vous aider.

 

Jean-Marc

0 Compliments
Message 5 sur 17
4 314 Visites

Toutes mes excuses, j'avais lu votre message un peu trop rapidement "Je ne peux pas garder les VI en arrière plan, sinon, ça entrainerait des risques de mauvaise utilisation."

 

Jean-Marc

0 Compliments
Message 6 sur 17
4 298 Visites

Bonjour J-M,

J'ai essayé votre méthode, mais je n'arrive pas à la faire fonctionner. Serait-il possible que vous mettiez le code en pièce jointe ? Sinon, je vous ai mis une image de mon code ci-dessous. Dites-moi si vous voyez une erreur. Ce code est celui de "Menu.vi", et le but est d'ouvrir "RecepteurT2.vi".

 

ouvertureVI.JPG

 

Merci d'avance.

ln

0 Compliments
Message 7 sur 17
4 228 Visites

Les deux VI doivent être placés dans le même répertoire.  Il faut démarrer le "VI principal" et utilise le bouton "VI1 Front" pour cacher le Vi principal et faire apparaître le VI1.  Pour revenir au VI principal il faut utiliser le bouton "VI principal (contrôle)".

 

Jean-Marc

Tout télécharger
0 Compliments
Message 8 sur 17
4 224 Visites
LV8.0
Tout télécharger
0 Compliments
Message 9 sur 17
4 223 Visites

Bonjour,

L'exemple que vous avez mis correspond à ce que je cherchais, mais maintenant, je complique un peu la chose, parce que je voudrais que cela fonctionne également pour des VI en cascade : Menu.vi ouvre VI1.vi et Menu est masqué (ça ça fonctionne), VI1.vi ouvre VI2.vi et VI1.vi est masqué (ça fonctionne également), mais quand je veux fermer VI2.vi et retourner à Menu.vi, alors qu'il a été appelé par VI1.vi, ça ne fonctionne pas. Je pense que le problème vient du fait que je n'arrive pas à transmettre les références des VI depuis Menu vers le sous-sous-vi VI2. Est-il possible de transmettre les références de VI ?

 

Merci d'avance.

Ln

0 Compliments
Message 10 sur 17
4 175 Visites