Seite 2 von 2
Re: Mehrer Menüs abfragen
Verfasst: 11.12.2014 23:59
von stevie1401
Ich glaube, nun habe ich es endlich verstanden.
Code: Alles auswählen
OpenWindow(0, 10, 10, 800, 600, "Window 1")
If CreateMenu(0, WindowID(0)) ; hier beginnt das Erstellen des Menüs...
MenuTitle("Project")
MenuItem(1, "Open" +Chr(9)+"Ctrl+O")
MenuItem(2, "Save" +Chr(9)+"Ctrl+S")
MenuItem(3, "Save as"+Chr(9)+"Ctrl+A")
MenuItem(4, "Close" +Chr(9)+"Ctrl+C")
EndIf
OpenWindow(1, 200, 200, 800, 600, "Window 2")
If CreateMenu(1, WindowID(1)) ; hier beginnt das Erstellen des Menüs...
MenuTitle("Menu2")
MenuItem(5, "Zeile1")
MenuItem(6, "Zeile2")
MenuItem(7, "Zeile3")
MenuItem(8, "Zeile4")
EndIf
Repeat
Event = WaitWindowEvent()
If event= #PB_Event_Menu
Debug EventMenu()
EndIf
Until WaitWindowEvent()=#PB_Event_CloseWindow
Ich muss den einzelnen MenuItems unterschiedliche(fortlaufende Nummern) geben.
So kann ich dann mit EventMenu() herausfinden was angeklickt wurde.
Ist nicht wirklich gut beschrieben, finde ich.
Nun hab ichs aber.
Vielen Dank für eure Hilfe.
Re: Mehrer Menüs abfragen
Verfasst: 12.12.2014 00:57
von Vera
stevie1401 hat geschrieben:Ich muss den einzelnen MenuItems unterschiedliche(fortlaufende Nummern) geben.
In der Tat

...
ts-soft hat geschrieben:Es werden alle MenuItems durchnummeriert, so das es keine doppelten geben kann ...
... könnte die Hilfe so einige Hinweise mehr haben.
Doch wenn man sich die MenüBefehle mal wirklich ansieht
(anstatt Schnipsel daraus zu kopieren), findet man schon weit vor
MenuID() ein erweitertes Beispiel bei
CreatePopupMenu() inclusive EventLoop mit
EventMenu().
Re: Mehrer Menüs abfragen
Verfasst: 12.12.2014 01:14
von jear
ts-soft schrieb: Es ist nicht notwendig rauszufinden, welches Menü angeklickt worden ist, ich weiß doch, wo ich welches MenüItem hinterlegt habe
und in welchem Menu dieses sich befindet.
Man kann das auch mit Bordmitteln erreichen.
Code: Alles auswählen
If OpenWindow(0, 10, 10, 800, 600, "Window 1")
If CreateMenu(0, WindowID(0))
MenuTitle("Project")
MenuItem(1, "Open" +Chr(9)+"Ctrl+O")
MenuItem(2, "Save" +Chr(9)+"Ctrl+S")
MenuItem(3, "Save as"+Chr(9)+"Ctrl+A")
MenuItem(4, "Close" +Chr(9)+"Ctrl+C")
EndIf
EndIf
If OpenWindow(1, 200, 200, 800, 600, "Window 2")
If CreateMenu(1, WindowID(1))
MenuTitle("Menu 2")
MenuItem(11, "Zeile1")
MenuItem(12, "Zeile2")
MenuItem(13, "Zeile3")
MenuItem(14, "Zeile4")
EndIf
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
EventMenu.i = EventMenu()
Select EventMenu ; wurde ein Menu angeklickt?
Case 1, 2, 3, 4
MessageRequester("Menue Projekt", "Zeile " + eventmenu, 0)
Case 11, 12, 13, 14
MessageRequester("Menue 2", "Zeile " + Str(eventmenu-10), 0)
Default
MessageRequester("Sonstwas", "Zeile " + eventmenu, 0)
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
End
Re: Mehrer Menüs abfragen
Verfasst: 17.12.2014 21:40
von stevie1401
Es werden alle MenuItems durchnummeriert, so das es keine doppelten geben kann ...
Das ist leider falsch.
Natürlich kann ich verschiedenen Menus die gleichen Nummern geben.
Auch Shortcuts kann ich (leider) gleiche Nummern wie Menus geben, sodass das ganze sehr Fehleranfällig ist.
Gebe ich einem Shortcut die Nr 3 und einem Menuitem auch, so wird immer das Menuitem aufgerufen, wenn ich das Shortcut benutze. Es gibt sehr unangenehme Nebenwirkungen.
Ein Beispiel:
AddKeyboardShortcut(win1, #PB_Shortcut_Return, 3) ;fügt die Returnabfrage Fenster 1 hinzu
Habe ich ein Menuitem 3, in welchen z.B. "Schliessen" steht, würde immer "Schliessen" im Chat stehen, wenn Return gedrückt wurde, also MenuItem3 aufgerufen werden.
Re: Mehrer Menüs abfragen
Verfasst: 17.12.2014 21:52
von Kiffi
stevie1401 hat geschrieben:Natürlich kann ich verschiedenen Menus die gleichen Nummern geben.
... was aber (zumindest in Deinem Fall) unsinnig wäre. Genau aus diesem Grund werden
Enumerationen empfohlen (was Dir auch schon von
Thomas in diesem Thread ans Herz gelegt wurde).
Grüße ... Peter
Re: Mehrer Menüs abfragen
Verfasst: 17.12.2014 22:07
von hjbremer
Unter Windows gibt es dafür eine Api in Verbindung mit einem WindowCallback
http://purebasic.fr/german/viewtopic.ph ... nu#p322124
Der Code könnte auch für normale Menus funktionieren, hab es aber nicht getestet.
Für Plattformunabhängigkeit versuche es einmal mit BindMenuEvent(#Menü, MenüEintrag, @Callback()) und EventData()
vielleicht hilft dir das.