Seite 1 von 1
PopUpMenü und Menü
Verfasst: 27.07.2005 16:33
von MASH
Wie kann ich ein Pupupmenü und ein normales menü gleichzeitg verwenden ich bekomme den Schleifenbaum einfach nicht hin hier mal ein beispiel was ich bisher versucht habe:
Code: Alles auswählen
Repeat
Event = WaitWindowEvent()
Select EventType()
Case #PB_EventType_RightClick ; rechte Maustaste wurde gedrückt =>
DisplayPopupMenu(#MenuPopUp_0,WindowID()) ; Popup-Menü jetzt öffnen
Repeat
If Event = #PB_Event_Menu ; ein Eintrag des Popup-Menüs wurde angeklickt
Select EventMenuID() ; ermittle den angeklickten Menü-Eintrag...
Case 1 : Debug "Menu: Open"
Case 2 : Debug "Menu: Save"
Case 3 : Debug "Menu: Save as"
Case 4 : Quit = 1
Case 5 : Debug "Menu: PureBasic.exe"
Case 6 : Debug "Menu: Text.txt"
EndSelect
EndIf
Until Quit = 1
EndSelect
Select EventMenuID()
Case #MENU_1 ;Öffnen
Debug "GadgetID: #MENU_1"
Case #MENU_2 ;Speichern
Debug "GadgetID: #MENU_2"
Case #MENU_3 ;Beenden
Debug "GadgetID: #MENU_3"
MessageRequester("INFO","BEENDEN",0)
End
Case #MENU_4 ;(Bearbeiten Untermenü)
Debug "GadgetID: #MENU_4"
Case #MENU_5 ;Kennwort
Debug "GadgetID: #MENU_5"
EndSelect
Until Event = #PB_EventCloseWindow
End
Verfasst: 27.07.2005 16:49
von Franky
Hi Mark.
Du brauchst nach dem Aufruf von DisplayPopupmenu() keine eigene Eventschleife einbauen (bei der du zudem nichteinmal waitwindowevent() oder Windowevent() nutzt) Du kannst es einfach in die normale Schleife einbauen.
zudem solltest du Event auch auswerten, anstatt alles durch zu testen
Code: Alles auswählen
Repeat
Event = WaitWindowEvent()
if event=#pb_eventtype
Select EventType()
Case #PB_EventType_RightClick ; rechte Maustaste wurde gedrückt =>
DisplayPopupMenu(#MenuPopUp_0,WindowID()) ; Popup-Menü jetzt öffnen
wurde angeklickt
EndSelect
elseif event=#pb_eventmenu
Select EventMenuID()
Case 1 : Debug "Menu: Open"
Case 2 : Debug "Menu: Save"
Case 3 : Debug "Menu: Save as"
Case 4 : Quit = 1
Case 5 : Debug "Menu: PureBasic.exe"
Case 6 : Debug "Menu: Text.txt"
Case #MENU_1 ;Öffnen
Debug "GadgetID: #MENU_1"
Case #MENU_2 ;Speichern
Debug "GadgetID: #MENU_2"
Case #MENU_3 ;Beenden
Debug "GadgetID: #MENU_3"
MessageRequester("INFO","BEENDEN",0)
End
Case #MENU_4 ;(Bearbeiten Untermenü)
Debug "GadgetID: #MENU_4"
Case #MENU_5 ;Kennwort
Debug "GadgetID: #MENU_5"
EndSelect
endif
Until Event = #PB_EventCloseWindow
End
Das sollte so laufen, hab´s jetzt net getestet.
Du musst aber natürlich darauf achten, dass du die Menuitems im Popupmenu anders durchnummerierst als die im Normalen Menu
Also nicht:
Normales Menu: 1,2,3
Popupmenu: 1,2,3
sondern:
Normales Menu: 1,2,3
Popupmenu:4,5,6
Das ist wichtig, wenn du wissen willst, welches Menuitem denn nun betätigt wurde. Haben allerdings beide die gleiche Funktion ist es nicht weiter wichtig.
Und noch ein Tip:
#menu_1 sagt nicht´s über die Funktion dieses Menuitems aus, du solltest vielleicht die items nach ihrer Funktion benennen (#menu_open für "Datei öffnen" zum Beispiel)
Verfasst: 27.07.2005 19:31
von MASH
Danke ich habe es jetzt verstanden glaube ich. Ich habe es jetzt wie folgt gelöst:
Code: Alles auswählen
Repeat
Event = WaitWindowEvent()
EventType = EventType()
If EventType = #PB_EventType_RightClick
DisplayPopupMenu(#MenuPopUp_0,WindowID())
ElseIf Event = #PB_EventMenu
Select EventMenuID()
Case #Menu_Open ;Öffnen
Debug "GadgetID: #MENU_1"
Case #Menu_Save ;Speichern
Debug "GadgetID: #MENU_2"
Case #Menu_Exit ;Beenden
Debug "GadgetID: #MENU_3"
MessageRequester("INFO","BEENDEN",0)
End
Case #Menu_df ;(Bearbeiten Untermenü)
Debug "GadgetID: #MENU_4"
Case #Menu_DatabasePWD ;Kennwort
Debug "GadgetID: #MENU_5"
Case #PopMenu_1
Debug "#PopMenu_1"
Case #PopMenu_2
Debug "#PopMenu_2"
Case #PopMenu_3
Debug "#PopMenu_3"
EndSelect
EndIf
Until Event = #PB_EventCloseWindow
Funktionieren tut es ist das denn auch so gut geschrieben??
Verfasst: 27.07.2005 23:17
von Batze
Ich finds gut so, nur das du auch im Popupmenü nicht #PopMenu_1 usw. benutzen solltest.
Aber ich denke mal das sollte eh nur ein Beispiel sein.
Verfasst: 28.07.2005 07:36
von Kiffi
MASH hat geschrieben:Funktionieren tut es ist das denn auch so gut geschrieben??
ich persönlich springe nicht mit End aus Repeat-Schleife, sondern
verwende hierfür eine Variable (Quit). Das ermöglicht, am Ende der
Schleife evtl. Aufräumarbeiten durchzuführen.
Des weiteren würde ich ebenso wie Batze die Popupmenü-Items mit
sprechenden Namen (so wie Dein Menü) ausstatten.
Code: Alles auswählen
Repeat
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadgetID() ; Is it a gadget event?
EventType = EventType() ; The event type
Select EventType
Case #PB_EventType_RightClick
DisplayPopupMenu(#MenuPopUp_0,WindowID())
Case #PB_EventMenu
Select EventMenuID()
Case #Menu_Open ;Öffnen
Debug "GadgetID: #MENU_1"
Case #Menu_Save ;Speichern
Debug "GadgetID: #MENU_2"
Case #Menu_Exit ;Beenden
Debug "GadgetID: #MENU_3"
Quit = 1
Case #Menu_df ;(Bearbeiten Untermenü)
Debug "GadgetID: #MENU_4"
Case #Menu_DatabasePWD ;Kennwort
Debug "GadgetID: #MENU_5"
Case #PopMenu_1
Debug "#PopMenu_1"
Case #PopMenu_2
Debug "#PopMenu_2"
Case #PopMenu_3
Debug "#PopMenu_3"
EndSelect
Case #PB_EventCloseWindow
Quit = 1
EndSelect
Until Quit = 1
CloseWindow(#DeinWindow)
; evtl. Aufräumaktionen
Grüße ... Kiffi
Verfasst: 28.07.2005 10:12
von Batze
Das mit dem Quit ist auch Geschmackssache.
Es gibt bestimmt auch Leute die gern Brake benutzen oder sich eine eigene Prozedur zum aufräumen schreiben.
Das mit der Prozedur ist bei Fehlermeldungen mit anschließendem beenden wirklich praktisch.
Verfasst: 28.07.2005 10:54
von Kiffi
> Das mit dem Quit ist auch Geschmackssache.
yipp, jeder so, wie er gern möchte.
> Es gibt bestimmt auch Leute die gern
Brake benutzen
na, ich gehe nicht so gern in die Eisen beim Programmieren
Grüße ... Kiffi