MenuItem aufrufen

Anfängerfragen zum Programmieren mit PureBasic.
SIS
Beiträge: 7
Registriert: 07.10.2009 16:31

MenuItem aufrufen

Beitrag von SIS »

Hallo,

Mal wieder habe ich eine Anfängerfrage, bei der ich einfach nicht weiter weiß :cry:

Ich habe in meinem Programm ein Menü, anhand "CreateMenu" mit einzelnen Submenüs erstellt. Diese haben ja eine eigene Id um sie aufzurufen. Und genau da liegt mein Problem..wie rufe ich ein MenuItem(1, "MENU" +Chr(9)+"Ctrl+O") auf, sodass ich ein MessageRequester einbauen kann?
Ich hab da Stunden rumexperementiert und nichts ist bei rumgekommen -.-
Wäre um eure Hilfe sehr dankbar. :allright:

Code: Alles auswählen

 CreateMenu(#Menu, WindowID(0))    
   MenuTitle("MENU")
     MenuItem(1, "MENU"   +Chr(9)+"Ctrl+O")
     MenuItem(2, "MENU2"   +Chr(9)+"Ctrl+S")
   MenuTitle("SETTINGS")
     MenuItem(4, "fgh"+Chr(9)+"Ctrl+A")
     MenuItem(5, "gfh"+Chr(9)+"Ctrl+A")
   MenuTitle("MENU2")
     MenuItem(6, "fg"+Chr(9)+"Ctrl+A")
     MenuItem(7, "ghjgf"+Chr(9)+"Ctrl+A")
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: MenuItem aufrufen

Beitrag von X360 Andy »

Schau dir am besten mal das MenuItem Beispiel an.
Und dort das mit die Abfrage der Events.

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Menu example file
;
;    (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;

;
; We just have to open a window and see when an event happen on the menu
;

If OpenWindow(0, 100, 150, 195, 260, "PureBasic - Menu")

  ;
  ; Create the menu. The indent is very important here for a good lisibility
  ;

  If CreateMenu(0, WindowID(0))
    MenuTitle("File")
      MenuItem( 1, "&Load...")
      MenuItem( 2, "Save")
      MenuItem( 3, "Save As...")
      MenuBar()
      OpenSubMenu("Recents")
        MenuItem( 5, "Pure.png")
        MenuItem( 6, "Basic.jpg")
        OpenSubMenu("Even more !")
          MenuItem( 12, "Yeah")
        CloseSubMenu()
        MenuItem( 13, "Rocks.tga")
      CloseSubMenu()
      MenuBar()
      MenuItem( 7, "&Quit")

    MenuTitle("Edition")
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste")
      
    MenuTitle("?")
      MenuItem(11, "About")

  EndIf
  
  DisableMenuItem(0, 3, 1)
  DisableMenuItem(0, 13, 1)
  
  ;
  ; This is the 'event loop'. All the user actions are processed here.
  ; It's very easy to understand: when an action occurs, the EventID
  ; isn't 0 and we just have to see what have happened...
  ;
  
  Repeat

    Select WaitWindowEvent()

      Case #PB_Event_Menu

        Select EventMenu()  ; To see which menu has been selected

          Case 11 ; About
            MessageRequester("About", "Cool Menu example", 0)
            
          Default
            MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)

        EndSelect

      Case #PB_Event_CloseWindow
        Quit = 1

    EndSelect

  Until Quit = 1

EndIf

End  
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: MenuItem aufrufen

Beitrag von ts-soft »

Ein ausführbarer Code macht es den Helfern einfacher Dein Problem zu verstehen, bzw.
Dir ein Beispiel zu erstellen, aus dem Du die Lösung ersehen kannst. Codefragmente
sind im allg. nutzlos!

Code: Alles auswählen

If OpenWindow(0, 200, 200, 200, 100, "Menu Example")
  
  ; für die tastatur-shortcuts im menü
  ; der einfachheit halber erhalten sie dieselbe Ereignis-ID wie das Menü
  ; Menü und Shortcuts - Ereignisse arbeiten auf derselben ebene, ebenso wie Toolbarbutton
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_O, 1)
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_S, 2)
  
  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
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      
      Case #PB_Event_Gadget
        ;haben wir keins
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1
            Debug "Open"
          Case 2
            Debug "Save"
          ; usw
        EndSelect
    EndSelect
  ForEver
EndIf

Hier ein Beispiel mit Ereignisbehandlung, statt der Debug-Anweisungen kannste dort die
Messagerequester oder sonstwas einbauen.
Der Vollständigkeit halber hab ich gleich die Shortcuts mt eingebaut, falls dort das
Problem lag.

Gruß

Thomas
SIS
Beiträge: 7
Registriert: 07.10.2009 16:31

Re: MenuItem aufrufen

Beitrag von SIS »

Ok, dann werde ich in Zukunft den vollständigen Code einfügen.
Vielen Dank für eure Hilfe...sehr gutes Forum :allright:
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: MenuItem aufrufen

Beitrag von HeX0R »

SIS hat geschrieben:Ok, dann werde ich in Zukunft den vollständigen Code einfügen.
Nicht vollständig, sondern lauffähig!
Wenn da vier Seiten an Code stehen, wird es schon wieder weniger Helferlein geben, die sich da durchkämpfen wollen.

Also immer so auf das nötigste dezimieren, dass es trotzdem alleine noch lauffähig bleibt.
Nicht einfach, und mit Arbeit verbunden, aber du erwartest ja auch vom Helfer, dass er Arbeit investiert.
Antworten