Ciao,
Ho una casella di struttura a cui è associato uno script di menu. Quello script di menu ha diverse voci di menu, alcune delle quali hanno dei sottomenu.Molti dei sottomenu contengono una serie di opzioni che si escludono a vicenda per le quali voglio mettere un segno di spunta quando vengono selezionate, deselezionando allo stesso tempo tutte le alternative (quindi ad esempio, se il mio sottomenu imposta il numero di cifre decimali in una tabella su 1, 2, 3 o 4, quindi se seleziono "2", vorrò selezionare la voce "2" e deselezionare le voci "1", "3" e "4").
Sto ancora sviluppando questa applicazione, quindi l'attuale struttura del menu cambia costantemente man mano che aggiungo nuove opzioni e/o modifico quelle esistenti. Voglio quindi evitare di dover codificare in modo rigido il processo di controllo/deselezionamento di cui sopra. Invece, voglio identificare automaticamente in quale sottomenu ho appena fatto clic su un elemento, quindi eseguire una piccola funzione che cancella tutti i segni di spunta all'interno dello stesso sottomenu, quindi controlla l'elemento su cui ho appena fatto clic.Posso farlo con l'aiuto della proprietà "<< get submenu" se riesco a far sì che il mio script mi dica su quale voce di menu ho appena fatto clic.
io Potevo impostare una variabile di conteggio per ogni voce (es. "M=1" per la prima voce di menu, "M=2" per la seconda, "M=3" per la terza e così via) e quindi fare riferimento al valore di M per capire quale elemento ho appena cliccato (come ho fatto nel piccolo esempio qui sotto che ho preparato solo per illustrare il problema), ma poi dovrei cambiare tutte le assegnazioni ogni volta che il menu è stato modificato - che piuttosto sconfigge l'oggetto dell'esercizio.
Può essere fatto? Non riesco a vedere alcuna proprietà di una casella di contorno che mi fornisca queste informazioni.
Grazie molto
expr_POD = espr ( per (io= 1 , io<= 4 , i++, My_OutlineBox << imposta lo stato della voce di menu ( 1 +io, 0 )); My_OutlineBox << imposta lo stato della voce di menu ( 1 +POD, 1 ));
expr_Rec = espr ( per (io= 1 , io<= 3 , i++, My_OutlineBox << imposta lo stato della voce di menu ( 6 +io, 0 )); My_OutlineBox << imposta lo stato della voce di menu ( 6 +Rec, 1 ));
expr_Doc = espr ( per (io= 1 , io<= 4 , i++, My_OutlineBox << imposta lo stato della voce di menu ( 10 +io, 0 )); My_OutlineBox << imposta lo stato della voce di menu ( 10 +Doc, 1 ));
My_OutlineBox = OutlineBox ( "My OutlineBox" ,
casella di testo ( "Un po' di roba nella finestra" ),
<< imposta lo script del menu (
{
"Decimali" , " " ,
"1 baccello" , POD= 1 ; expr_POD,
"2 cialde" , POD= 2 ; expr_POD,
"3 cialde" , POD= 3 ; expr_POD,
"4 cialde" , POD= 4 ; expr_POD,
"Destinatario" , " " ,
"R e D" , Rec= 1 ; expr_Rec,
"Marketing" , Rec= 2 ; expr_Rec,
"Prevendita" , Rec= 3 ; expr_Rec,
"Formato documento" , " " ,
"Quarto" , Doc= 1 ; expr_Doc,
"Scatto" , Doc= 2 ; expr_Doc,
"A4" , Doc= 3 ; expr_Doc,
"Tavoletta" , Doc= 4 ; expr_Doc,
"E-mail" , Doc= 5 ; expr_Doc
}
),
/* Definisci sottomenu */
<< imposta il sottomenu ( 1 , 4 ),
<< imposta il sottomenu ( 6 , 3 ),
<< imposta il sottomenu ( 10 , 5 ),
/* Imposta i valori predefiniti */
<< imposta lo stato della voce di menu ( 2 , 1 ),
<< imposta lo stato della voce di menu ( 7 , 1 ),
<< imposta lo stato della voce di menu ( 11 , 1 )
);
nuova finestra ( "NW" ,
My_OutlineBox
);
Hai ragione, non c'è un messaggio JSL per ottenere l'indice della voce di menu selezionata, come <
Invece di usare tre diverse espressioni, come sopra, consiglierei di usare una funzione con tre parametri. L'uso di una funzione elimina la necessità di variabili estranee e semplifica anche il processo di aggiunta di nuove voci di menu in un secondo momento e riduce la duplicazione del codice. Vedi il mio esempio qui sotto per i dettagli.
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>