Salut,
J'ai une boîte de contour qui a un script de menu associé. Ce script de menu comporte plusieurs éléments de menu, dont certains ont des sous-menus.De nombreux sous-menus contiennent un ensemble d'options mutuellement exclusives par lesquelles je souhaite placer une coche lorsqu'elles sont sélectionnées, tout en décochant toutes les alternatives (par exemple, si mon sous-menu définit le nombre de décimales dans un tableau à 1, 2, 3 ou 4, alors si je sélectionne "2", je voudrai cocher l'élément "2" et décocher les éléments "1", "3" et "4").
Je suis toujours en train de développer cette application, donc la structure réelle du menu change constamment à mesure que j'ajoute de nouvelles options et/ou modifie celles qui existent déjà. Je veux donc éviter d'avoir à coder en dur le processus de vérification/décochage ci-dessus. Au lieu de cela, je veux identifier automatiquement dans quel sous-menu je viens de cliquer sur un élément, puis exécuter une petite fonction qui efface toutes les tiques dans le même sous-menu, puis vérifie l'élément sur lequel je viens de cliquer.Je peux le faire à l'aide de la propriété "<< get submenu" si je peux obtenir que mon script me dise sur quel élément de menu je viens de cliquer.
je pourrait configurez une variable de comptage pour chaque élément (c'est-à-dire "M=1" pour le premier élément de menu, "M=2" pour le second, "M=3" pour le troisième et ainsi de suite) puis référez-vous simplement à la valeur de M pour savoir sur quel élément je viens de cliquer (comme je l'ai fait dans le petit exemple ci-dessous que j'ai concocté juste pour illustrer le problème), mais je devrais alors changer toutes les affectations à chaque fois que le menu était édité - ce qui va plutôt à l'encontre de l'objet de l'exercice.
Cela peut-il être fait? Je ne vois aucune propriété d'une boîte de contour qui me fournirait cette information.
Merci beaucoup
expr_POD = expr ( pour (je= 1 , je<= 4 , i++, My_OutlineBox << définir l'état de l'élément de menu ( 1 +je, 0 )); My_OutlineBox << définir l'état de l'élément de menu ( 1 +POD, 1 ));
expr_Rec = expr ( pour (je= 1 , je<= 3 , i++, My_OutlineBox << définir l'état de l'élément de menu ( 6 +je, 0 )); My_OutlineBox << définir l'état de l'élément de menu ( 6 +Enreg, 1 ));
expr_Doc = expr ( pour (je= 1 , je<= 4 , i++, My_OutlineBox << définir l'état de l'élément de menu ( dix +je, 0 )); My_OutlineBox << définir l'état de l'élément de menu ( dix +Doc, 1 ));
My_OutlineBox = ContourBox ( « Ma boîte de présentation » ,
zone de texte ( "Quelques trucs dans la fenêtre" ),
<< définir le script du menu (
{
"Décimales" , " " ,
"1 POD" , POD= 1 ; expr_POD,
"2 POD" , POD= 2 ; expr_POD,
"3 POD" , POD= 3 ; expr_POD,
"4 POD" , POD= 4 ; expr_POD,
"Destinataire" , " " ,
"Recherche et développement" , Rec= 1 ; expr_Rec,
"Commercialisation" , Rec= 2 ; expr_Rec,
"Avant-vente" , Rec= 3 ; expr_Rec,
"Format de document" , " " ,
"Quarto" , Doc= 1 ; expr_Doc,
"Papier ministre" , Doc= 2 ; expr_Doc,
"A4" , Doc= 3 ; expr_Doc,
"Tablette" , Doc= 4 ; expr_Doc,
"E-mail" , Doc= 5 ; expr_Doc
}
),
/* Définir les sous-menus */
<< définir le sous-menu ( 1 , 4 ),
<< définir le sous-menu ( 6 , 3 ),
<< définir le sous-menu ( dix , 5 ),
/* Définir les valeurs par défaut */
<< définir l'état de l'élément de menu ( 2 , 1 ),
<< définir l'état de l'élément de menu ( sept , 1 ),
<< définir l'état de l'élément de menu ( 11 , 1 )
);
nouvelle fenetre ( "NO" ,
My_OutlineBox
);
Vous avez raison, il n'y a pas de message JSL pour obtenir l'index de l'élément de menu sélectionné, comme <
Au lieu d'utiliser trois expressions différentes, comme vous l'avez fait ci-dessus, je recommanderais d'utiliser une fonction avec trois paramètres. L'utilisation d'une fonction supprime le besoin de variables superflues et simplifie également le processus d'ajout ultérieur de nouveaux éléments de menu et réduit la duplication de code. Voir mon exemple ci-dessous pour plus de détails.
setMenuChecked = Function(
{
startIndexForSubgroup, // The index of the first menu item for this subgroup
endIndexForSubgroup, // The index of the last menu item for this subgroup
indexOfSelectedItem // The index of the item that was just selected
},
{i},
For( i = startIndexForSubgroup, i <= endIndexForSubgroup, i++,
My_OutlineBox << set menu item state( i, 0 )
);
My_OutlineBox << set menu item state( indexOfSelectedItem, 1 );
);
My_OutlineBox = Outline Box( "My OutlineBox",
Text Box( "Some stuff in the window" ),
<<SET menu="" script=""></SET>