User Tools

Site Tools


k13:k13.1:k13.1.1:start

Baumstruktur

Figure 13.1.1.1: Tree structure in a menu list

The 'Tools' menu, for example, contains the three menus: Options, Color palettes and the Preview (Optional) menu, with the Color palettes menu containing two menus in the menu list, as shown in Figure 13.1.1.1.1:

Please note that in this example, the two menus Extras and Colour palettes only fulfil the role as containers for further menus, because they only display the other menus in the assigned menu list after one click, but do not trigger any program actions! In addition, the terms menu, menu bar, menu list and submenu are used as described in the first part.

There are 3 proven variants of how to create menus in a self-defined structure using source code at runtime. This can be done quickly and easily if you have already noted the tree structure of the future menu in full beforehand.

  • Menus are created only with the stereotype MenuItem AS Menu/ and the assigned properties. The advantage is the speed with which you can also define extensive and nested menus. A disadvantage is the fact that once set properties can no longer be changed or read out at runtime of the program. Under www.gambas-club.de different variants are presented and controversially discussed under the heading' How to create menu + submenus by code'.
  • Definition of a menu structure with a suitable control structure in the source code. This gives the menus different but automatically assigned captions, but they all have the same name. Therefore, the event handler only knows this one name for all menu actions under which events are triggered. However, you can use the Last. text property to determine which menu object triggered an event and can react to it in a targeted way, where Last is a reference to the last object that triggered an event. At http://de.wikibooks.org/wiki/Gambas:_Men%C3%BC you will find a well-documented example.
  • Definition of individual menus in a specific structure. Note: The order of the defined menus in the source code and their properties determines their arrangement on the form, not the names used (pseudo-numbering, menu identifiers).

Here is an approach, where only one menu list for the 'Extras' menu from the above mentioned project (→ Figure 13.1.1.1) is described:

...
Private mnuMenu2 As Menu
Private mnu21Optionen As Menu 
Private mnu22SelectColor As Menu 
Private mnu23PreView As Menu 
Private mnu221Palette1 As Menu 
Private mnu222Palette2 As Menu
...
Private mnuSpace As Menu 
 
Public Sub Form_Menu() 
 
  mnuMenu2 = New Menu(FMain, False) ' 2. Eintrag in der Menü-Leiste , sichtbar
  mnuMenu2.Caption = "Extras" 
 
  mnu21Optionen = New Menu(mnuMenu2) As "mnuOptionen" 
  mnu21Optionen.Caption = "Optionen" 
  mnu21Optionen.Picture = Picture["icon:/16/options"]  
 
  mnu22SelectColor = New Menu(mnuMenu2) As "mnuSelectColor" 
  mnu22SelectColor.Caption = "Farbpaletten" 
  mnu22SelectColor.Picture = Picture["icon:/16/fill"] 
  mnu221Palette1 = New Menu(mnu22SelectColor) As "mnuPalette1" 
  mnu221Palette1.Caption = "Farbtafel 1" 
  mnu221Palette1.Picture = Picture["icon:/16/pen"] 
  mnuSpace = New Menu(mnu22SelectColor) 
  mnuSpace.Caption = "" ' Trennlinie
  mnu222Palette2 = New Menu(mnu22SelectColor) As "mnuPalette2" 
  mnu222Palette2.Caption = "Farbtafel 2" 
  mnu222Palette2.Picture = Picture["icon:/16/color"]   
 
  mnu23PreView = New Menu(mnuMenu2) As "mnuPreView" 
  mnu23PreView.Caption = "Vorschau" 
  mnu23PreView.Checked = True 
  mnu23PreView.Toggle = True 
  ...
End ' Form_Menu()

Baumstruktur

Abbildung 13.1.1.1: Baumstruktur in einer Menü-Liste

Das Menü 'Extras' zum Beispiel enthält die drei Menüs: Optionen, Farbpaletten und das (Options-) Menü Vorschau, wobei das Menü Farbpaletten zwei Menüs in der Menüliste enthält,wie Sie der Abbildung 13.1.1.1 entnehmen können:

Bitte beachten Sie, dass die beiden Menüs Extras und Farbpaletten in diesem Beispiel nur die Rolle als Container für weitere Menüs erfüllen, weil diese nach einem Klick nur die weiteren Menüs in der zugeordneten Menüliste anzeigen, jedoch keine Programmaktionen auslösen! Im weiteren werden die Begriffe Menü, Menüleiste, Menüliste und Untermenü so benutzt, wie sie im ersten Teil beschrieben worden sind.

Es gibt 3 erprobte Varianten, wie Sie Menüs in einer selbst definierten Struktur mit Hilfe von Quelltext zur Laufzeit anlegen. Das gelingt schnell und wenig fehleranfällig, wenn Sie sich die Baumstruktur des zukünftigen Menüs bereits vorher vollständig notiert haben.

  • Menüs werden nur mit dem Stereotyp MenuItem AS Menu und den zugeordneten Eigenschaften angelegt. Vorteil ist die Schnelligkeit, mit der man auch umfangreiche und verschachtelte Menüs definieren kann. Von Nachteil ist der Umstand, einmal gesetzte Eigenschaften zur Laufzeit des Programms nicht mehr verändern oder auslesen zu können. Unter www.gambas-club.de werden unter der Rubrik 'Wie Menu + Untermenus per Code erstellen?' unterschiedliche Varianten vorgestellt und kontrovers diskutiert.
  • Definition einer Menüstruktur mit einer geeigneten Kontrollstruktur im Quelltext. Dadurch erhalten die Menüs zwar unterschiedliche, aber automatisch vergebene Beschriftungen (Caption); sie besitzen jedoch alle den gleichen Namen. Daher kennt der Event-Handler nur diesen einen Namen für alle Menü-Aktionen, unter dem Events ausgelöst werden. Mit Hilfe der Eigenschaft Last.Text können Sie jedoch ermitteln, welches Menü-Objekt ein Ereignis ausgelöst hat und können gezielt darauf reagieren, wobei Last eine Referenz auf das letzte Objekt ist, das ein Ereignis ausgelöst hat. Auf http://de.wikibooks.org/wiki/Gambas:_Men%C3%BC finden Sie ein gut dokumentiertes Beispiel.
  • Definition von einzelnen Menüs in einer bestimmten Struktur. Beachten Sie: Die Reihenfolge der definierten Menüs im Quelltext mit ihren Eigenschaften bestimmt ihre Anordnung auf dem Formular, nicht die genutzten Bezeichnungen (Pseudo-Nummerierung, Menübezeichner).

Hier ein Ansatz, wobei nur eine Menüliste zum Menü 'Extras' aus dem o.a. Projekt (Abbildung 13.1.1.1) beschrieben wird:

...
Private mnuMenu2 As Menu
Private mnu21Optionen As Menu 
Private mnu22SelectColor As Menu 
Private mnu23PreView As Menu 
Private mnu221Palette1 As Menu 
Private mnu222Palette2 As Menu
...
Private mnuSpace As Menu 
 
Public Sub Form_Menu() 
 
  mnuMenu2 = New Menu(FMain, False) ' 2. Eintrag in der Menü-Leiste , sichtbar
  mnuMenu2.Caption = "Extras" 
 
  mnu21Optionen = New Menu(mnuMenu2) As "mnuOptionen" 
  mnu21Optionen.Caption = "Optionen" 
  mnu21Optionen.Picture = Picture["icon:/16/options"]  
 
  mnu22SelectColor = New Menu(mnuMenu2) As "mnuSelectColor" 
  mnu22SelectColor.Caption = "Farbpaletten" 
  mnu22SelectColor.Picture = Picture["icon:/16/fill"] 
  mnu221Palette1 = New Menu(mnu22SelectColor) As "mnuPalette1" 
  mnu221Palette1.Caption = "Farbtafel 1" 
  mnu221Palette1.Picture = Picture["icon:/16/pen"] 
  mnuSpace = New Menu(mnu22SelectColor) 
  mnuSpace.Caption = "" ' Trennlinie
  mnu222Palette2 = New Menu(mnu22SelectColor) As "mnuPalette2" 
  mnu222Palette2.Caption = "Farbtafel 2" 
  mnu222Palette2.Picture = Picture["icon:/16/color"]   
 
  mnu23PreView = New Menu(mnuMenu2) As "mnuPreView" 
  mnu23PreView.Caption = "Vorschau" 
  mnu23PreView.Checked = True 
  mnu23PreView.Toggle = True 
  ...
End ' Form_Menu()
The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k13/k13.1/k13.1.1/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools