Mehrer Menüs abfragen

Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Mehrer Menüs abfragen

Beitrag 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.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Mehrer Menüs abfragen

Beitrag 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().
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Re: Mehrer Menüs abfragen

Beitrag 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
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Mehrer Menüs abfragen

Beitrag 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.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mehrer Menüs abfragen

Beitrag 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
a²+b²=mc²
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Mehrer Menüs abfragen

Beitrag 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.
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten