<< | Inhaltsverzeichnis | Suchen | >> |
Funktion
Syntax: |
GR_ADDMENUE
(<MENUE-STUFE>, |
||
Bedeutung: |
Mit den Funktionen GR_ADDMENUE wird ein Menuebaum erzeugt, der anschließend durch GR_STARTMENUE zur Abarbeitung aufgerufen werden kann. |
||
|
Mit GR_ADDMENUE wird jeweils ein gesamter Zweig (Hauptmenuepunkt und zugehörige Untermenuepunkte) definiert. |
||
|
<MENUE-STUFE> legt fest, an welcher Stelle im Menue-Baum der neue Zweig seinen Platz findet. <MENUE-STUFE> darf nur aus Ziffern und Punkten dazwischen bestehen. |
||
Beispiel: |
"1" |
bezeichnet Menue-Stufe 1 |
|
|
"1.2" |
bezieht sich auf den 2. Untermenuepunkt von GR_ADDMENUE mit
<MENUE-STUFE>="1". |
|
|
"1.2.1" |
bezieht sich auf den 1. Untermenuepunkt von GR_ADDMENUE mit
<MENUE-STUFE>="1.2". |
|
|
Die obersten Menuestufen ("1" , "2" , ...) müssen nicht lückenlos aufsteigend sein. Sie müssen auch nicht unbedingt in aufsteigender Reihenfolge mit den Funktionen GR_ADDMENUE definiert werden. Untergeordnete Menuezweige können jedoch nur definiert werden, wenn der zugehörige übergeordnete Zweig bereits vorhanden ist. |
||
Beispiel: |
<MENUE-STUFE> = "2.3" kann nur dann definiert werden, wenn ein Zweig mit Menuestufe "2" existiert und dieser wenigstens 3 Untermenuepunkte besitzt. |
||
|
Wird GR_ADDMENUE mit einer Menuestufe aufgerufen, die im Menuebaum durch einen vorherigen Aufruf bereits vorhanden ist, so wird der bereits vorhandene Zweig durch den neuen ersetzt. |
||
|
<HAUPTMENUE-NAME> legt den übergeordneten Namen fest. |
||
|
In <UNTERMENUE-NAMEN> stehen durch Strichpunkte getrennt die einzelnen Untermenuenamen. Dabei sind leere Einträge zulässig. Ein leerer Eintrag führt zu einer Trennlinie im Menue. Am Anfang der einzelnen Untermenuenamen können durch Komma getrennt zwei Bitmaps angegeben werden, die unter WINDOWS im Menue angezeigt werden. Die erste Bitmap @<BITMAP-1> wird angezeigt, wenn der Menuepunkt nicht markiert ist, die zweite Bitmap @<BITMAP-2> wird angezeigt, wenn der Menuepunkt markiert ist (siehe GR_ACTIVATE). Ein einzelner Untermenuename ist also folgendermaßen aufgebaut: [@<BITMAP-1>,[@<BITMAP-2>,]]<UNTERMENUENAME> <BITMAP-1> kann fehlen, wenn nur eine Bitmap für die Markierung angegeben werden soll. Weiße Pixel in den Bitmaps werden transparent angezeigt. |
||
Beispiel: |
"@,@MARKIERT.BMP,Standardeinstellungen" |
||
|
In den einzelnen Namen (Haupt- und Untermenue) kann das Zeichen ‘&’ zur Hervorhebung eines Zeichens verwendet werden. Das Zeichen ‘&’ selbst wird dabei im Menue nicht angezeigt. |
||
|
Im Namen kann auch eine Control- oder Funktionstaste angegeben werden. Die Taste muß durch ein Leerzeichen getrennt am Ende des Names stehen, z.B. "Erfassen CTRL/A". |
||
|
Mit <MACRONAME> wird der Macro angegeben, der aufgerufen wird, wenn ein Menuepunkt ausgewählt wurde. Es kann für alle Zweige auch derselbe Macro angegeben werden. Die Gesamtsteuerung eines SAA-Menues verläuft folgendermaßen: |
||
|
1. |
Mit GR_ADDMENUE wird der Menuebaum aufgebaut. |
|
|
2. |
Mit GR_STARTMENUE wird das Menue gestartet, d.h. der Anwender kann einen Menuepunkt auswählen. Bei mehrstufigen Menues behält dabei GR_STARTMENUE solange die Kontrolle bis ein Menuepunkt gewählt wird, der kein Untermenue hat. Erst dann wird der zugehörige Macro aufgerufen. Die Variable EBUS_GR_MENUE$ enthält dann den Text des ausgewählten Menuepunktes in der Schreibweise wie er bei GR_ADDMENUE definiert wurde, jedoch ohne das Zeichen '&'. |
|
|
3. |
Da jetzt ein individueller Macro abläuft, der beliebig Masken, Unterprogramme und andere Macros aufrufen kann, gibt es prinzipiell 2 Möglichkeiten, wie in das Menue wieder zurückgekehrt werden kann: |
|
|
|
· Der aufgerufene Macro wird normal beendet, d.h. alle darin aufgerufenen Masken, Unterprogramme und Macros werden mit <ESC>, ENDPROG bzw. QUIT beendet. Nach der Beendigung des Macros hat GR_STARTMENUE wieder die Kontrolle. Ob dabei der Bildschirm gelöscht wird, wird durch den Schalter ENABLE/DISABLE GR_MENUE_CLS festgelegt. |
|
|
|
· Der aufgerufene Macro verzweigt zu einer Maske, auf der Eingabefelder bearbeitet werden. Der Anwender kann nun mit F10 oder mit der Maus jederzeit wieder in das Menue verzweigen. Wird das Menue wieder mit <ESC> verlassen oder unter WINDOWS das Main-Window angeklickt, so bleibt das Programm beim gerade bearbeiteten Eingabefeld. Wird jedoch ein neuer Menuepunkt ausgewählt, so wird der gerade 'laufende' Macro, der ja seit der letzten Menueauswahl aktiv ist, automatisch abgebrochen und der zum jetzt ausgewählten Menuepunkt gehörige Macro wird gestartet. Ein Stack-Überlauf kann dabei nicht vorkommen, wenn ENABLE LONGJMP gesetzt ist, da dann programmintern der Stack jeweils mit einem longjmp zurückgesetzt wird. |
|
|
4. |
Wenn der aufgerufene Macro die Anweisung ENDMENUE ausführt, wird GR_STARTMENUE beendet, d.h. die nächste Anweisung nach GR_STARTMENUE wird ausgeführt. Die Anweisungen ENDPROG, EXIT und TERMINATE führen zur sofortigen Beendigung des Programms. |
|
|
Achtung: Da die Funktion GR_STARTMENUE die Kontrolle über das Menue hat, kann in den Macros, die die einzelnen Menuepunkte verarbeiten, keine Maske mit GOTO #... aufgerufen werden. Die interne Programmlogik läßt dies nicht zu. Stattdessen sind Masken mit CALL #... aufzurufen. |
||
|
Die Funktion GR_ADDMENUE liefert als Ergebnis 0, wenn kein Fehler auftrat, andernfalls die Fehlernummer (siehe Anhang). |
||
Beispiel: |
H% = GR_ADDMENUE
("1","&Dateien", |
||
|
Achtung: Die Trennlinie zwischen ‘Einzeln’ und ‘Alles’ wird durch einen leeren Eintrag (zwei Strichpunkte hintereinander) erzeugt. |
||
|
Der zugehörige Macro MEN.MACRO könnte folgendermaßen aussehen: |
||
|
CASE EBUS_GR_MENUE$ |
||
|
Stimmt bei untergeordneten Menuezweigen der Hauptmenuename des untergeordneten Menuezweiges nicht mit dem entsprechenden Namen des übergeordneten Zweiges überein, so gilt der Hauptmenuename des unteren Menuepunktes. |
||
Beispiel: |
In obigem Beispiel hat <MENUE-STUFE> = "2.3" den Hauptmenuepunkt "&Alles". Dieser bezieht sich auf den 3. Unterpunkt von Menue "2", der ebenfalls "&Alles" heißt. Der Aufruf |
||
|
H% = GR_ADDMENUE ("2.3",
"&Teile","&Aufsteigend;A&bsteigend", |
||
|
führt dazu, daß im Menue statt 'Alles' jetzt 'Teile' erscheint. |
||
siehe auch: |
GR_STARTMENUE, GR_DELMENUE, GR_ADDPOPUPMENUE, ENDMENUE, MENUE$, GR_ACTIVATE, GR_DEACTIVATE, EBUS_GR_MENUE$ |
||