Hi,
Ich habe eine Gliederungsbox, der ein Menüskript zugeordnet ist. Dieses Menüskript hat mehrere Menüpunkte, von denen einige Untermenüs haben.Viele der Untermenüs enthalten eine Reihe sich gegenseitig ausschließender Optionen, bei deren Auswahl ich ein Häkchen setzen möchte, während ich gleichzeitig alle Alternativen abwähle (also zum Beispiel, wenn mein Untermenü die Anzahl der Dezimalstellen in einer Tabelle festlegt auf 1, 2, 3 oder 4, dann möchte ich, wenn ich "2" auswähle, das Element "2" markieren und die Elemente "1", "3" und "4" deaktivieren).
Ich entwickle diese Anwendung immer noch, daher ändert sich die tatsächliche Menüstruktur ständig, wenn ich neue Optionen hinzufüge und/oder bestehende ändere. Ich möchte daher vermeiden, dass der obige Prozess zum Aktivieren/Deaktivieren hartcodiert werden muss. Stattdessen möchte ich automatisch erkennen, in welchem Untermenü ich gerade auf ein Element geklickt habe, und dann einfach eine kleine Funktion ausführen, die alle Häkchen innerhalb desselben Untermenüs löscht und dann das Element überprüft, auf das ich gerade geklickt habe.Ich kann dies mit Hilfe der Eigenschaft "<< get submenu" tun, wenn ich mein Skript dazu bringen kann, mir mitzuteilen, auf welchen Menüpunkt ich gerade geklickt habe.
ich könnte Richten Sie für jedes Element eine Zählvariable ein (z. B. „M=1“ für das erste Menüelement, „M=2“ für das zweite, „M=3“ für das dritte usw.) und beziehen Sie sich dann einfach auf den Wert von M, um herauszufinden, welches Element ich gerade angeklickt habe (wie ich es in dem kleinen Beispiel unten getan habe, das ich nur zur Veranschaulichung des Problems erfunden habe), aber ich müsste dann jedes Mal alle Zuweisungen ändern, wenn das Menü war bearbeitet - was das Ziel der Übung eher verfehlt.
Ist das möglich? Ich kann keine Eigenschaft einer Gliederungsbox sehen, die mir diese Informationen liefern würde.
Danke vielmals
expr_POD = Ausdruck ( zum (ich= 1 , ich<= 4 , i++, My_OutlineBox << Status des Menüeintrags festlegen ( 1 + ich, 0 )); Meine_Gliederungsbox << Status des Menüeintrags festlegen ( 1 +POD, 1 ));
expr_Rec = Ausdruck ( zum (ich= 1 , ich<= 3 , i++, My_OutlineBox << Status des Menüeintrags festlegen ( 6 + ich, 0 )); Meine_Gliederungsbox << Status des Menüeintrags festlegen ( 6 +Aufnahme, 1 ));
expr_Doc = Ausdruck ( zum (ich= 1 , ich<= 4 , i++, My_OutlineBox << Status des Menüeintrags festlegen ( 10 + ich, 0 )); Meine_Gliederungsbox << Status des Menüeintrags festlegen ( 10 +Doktor, 1 ));
My_OutlineBox = OutlineBox ( "Meine OutlineBox" ,
Textfeld ( "Ein paar Sachen im Fenster" ),
<< Set-Menü-Skript (
{
"Dezimalzahlen" , " " ,
"1 POD" , POD= 1 ; expr_POD,
"2 POD" , POD= 2 ; expr_POD,
"3 POD" , POD= 3 ; expr_POD,
"4 POD" , POD= 4 ; expr_POD,
"Empfänger" , " " ,
"R und D" , Rec= 1 ; expr_Rec,
"Marketing" , Rec= 2 ; expr_Rec,
"Vorverkauf" , Rec= 3 ; expr_Rec,
"Dokumentformat" , " " ,
"Quarto" , Dok= 1 ; expr_Doc,
"Kanzleipapier" , Dok= 2 ; expr_Doc,
"A4" , Dok= 3 ; expr_Doc,
"Tablette" , Dok= 4 ; expr_Doc,
"Email" , Dok= 5 ; expr_Doc
}
),
/* Untermenüs definieren */
<< Untermenü einstellen ( 1 , 4 ),
<< Untermenü einstellen ( 6 , 3 ),
<< Untermenü einstellen ( 10 , 5 ),
/* Standardwerte setzen */
<< Status des Menüeintrags festlegen ( 2 , 1 ),
<< Status des Menüeintrags festlegen ( 7 , 1 ),
<< Status des Menüeintrags festlegen ( 11 , 1 )
);
neues Fenster ( "NW" ,
My_OutlineBox
);
Sie haben Recht, es gibt keine JSL-Nachricht zum Abrufen des Index des ausgewählten Menüelements, wie z. B. <
Anstatt drei verschiedene Ausdrücke zu verwenden, wie Sie es oben getan haben, würde ich empfehlen, eine Funktion mit drei Parametern zu verwenden. Die Verwendung einer Funktion beseitigt die Notwendigkeit für die irrelevanten Variablen und vereinfacht auch das spätere Hinzufügen neuer Menüelemente und reduziert die Codeduplizierung. Siehe mein Beispiel unten für Details.
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>