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.