Seite 2 von 2
Re: IsPopupMenuVisible_()?
Verfasst: 20.02.2015 20:37
von ts-soft
Rudi hat geschrieben:Es ist zur Laufzeit nur eine WaitWindowEvent() - Schleife in Gebrauch!
Die aber nicht auf alle Ereignisse reagiert, sondern nur auf bestimmte. Man kann das Programm
noch nicht mal beenden, wenn Menü aufpoppt. Naja, vielleicht bringste den User ja, das zu
klicken, von dem Du meinst, was er klicken soll
Ich bin da lieber erstmal raus.
Gruß
Thomas
Re: IsPopupMenuVisible_()?
Verfasst: 20.02.2015 20:59
von ts-soft
Vielleicht hilft ja dieser Ansatz:
Code: Alles auswählen
EnableExplicit
Procedure MyPopupmenu()
Select EventMenu()
Case 1
Debug "Hallo"
Case 2
Debug "Welt"
EndSelect
EndProcedure
Procedure Popup()
If CreatePopupMenu(0)
MenuItem(1, "Hallo")
MenuItem(2, "Welt")
DisplayPopupMenu(0, WindowID(0))
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreatePopupMenu(0)
BindMenuEvent(0, 1, @MyPopupmenu())
BindMenuEvent(0, 2, @MyPopupmenu())
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_RightClick
Popup()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Re: IsPopupMenuVisible_()?
Verfasst: 20.02.2015 23:05
von Rudi
Danke für die Mühe! Der Ansatz hilft aber nicht, da ich ja noch Parameter übergeben muss.
Zum vorherigen Post: kannste ja mal hier auf den Button und dann mal auf die Beenden-Schaltfläche klicken - nach dem Rechtsklick:
Code: Alles auswählen
EnableExplicit
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_INITMENUPOPUP
Debug "PopupMenu wurde geöffnet."
Case #WM_UNINITMENUPOPUP
If IsMenu(0)
FreeMenu(0)
EndIf
Debug "PopupMenu wurde geschlossen."
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure Popup()
If CreatePopupMenu(0)
MenuItem(1, "Hallo")
MenuItem(2, "Welt")
DisplayPopupMenu(0, WindowID(0))
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu()
Case 1
Debug "Hallo"
Case 2
Debug "Welt"
EndSelect
EndSelect
Until Not IsMenu(0)
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(1, 100, 100, 100, 25, "Button")
SetWindowCallback(@WinCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_RightClick
Popup()
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Debug "Das ist der Button gewesen!"
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
In meinem "richtigen" Code wird das Beenden, das Menü usw. im Bindevent verarbeitet. Das ist hier nicht die Frage.
Re: IsPopupMenuVisible_()?
Verfasst: 20.02.2015 23:30
von Autonomus
Guten Abend Rudi.
Was genau möchtest du denn übergeben als Parameter?
Denn deine Aussage ist ja nach wie vor rätselhaft.
Geht es dir um das SystemMenu oder um das CreateMenu() oder wieder um ein völlig selbst erstelltes Menü?
Re: IsPopupMenuVisible_()?
Verfasst: 20.02.2015 23:38
von Rudi
Re: IsPopupMenuVisible_()?
Verfasst: 21.02.2015 00:23
von Autonomus
Ok, hier ein Beispiel von mir mit dynamischer Abfrage nach dem geklicktem PopupMenuItem:
Code: Alles auswählen
Structure PopupMenu
Item.i
Title.s
ImageID.i
EndStructure
Global NewList MenuList.PopupMenu()
Procedure AddPopupMenuItem(Title.s, ImageID.i)
AddElement(MenuList())
MenuList()\Item.i = ListSize(MenuList()) + 1
MenuList()\Title.s = Title.s
MenuList()\ImageID.i = ImageID.i
EndProcedure
AddPopupMenuItem("Hallo", 0)
AddPopupMenuItem("Welt", 1)
Procedure WhichPopupMenuItem()
ResetList(MenuList())
While NextElement(MenuList())
With MenuList()
Select EventMenu()
Case 0 : End
Case \Item.i : Debug \Title.s + Chr(32) + "gedrückt" : Debug "PopupMenu geschlossen"
EndSelect
EndWith
Wend
EndProcedure
OpenWindow(0, 25, 25, 600, 400, "Menu", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If Not AddKeyboardShortcut(0, #PB_Shortcut_Escape, 0)
MessageRequester("Error", "Adding Shortcut failed")
EndIf
If Not CreatePopupMenu(0)
MessageRequester("Error", "Create PopupMenu failed")
EndIf
ResetList(MenuList())
While NextElement(MenuList())
With MenuList()
MenuItem(\Item.i, \Title.s)
EndWith
Wend
Repeat
Select WaitWindowEvent()
Case #PB_Event_RightClick
Debug "PopupMenu geöffnet"
DisplayPopupMenu(0, WindowID(0))
Case #PB_Event_Menu
;Select EventMenu()
; Case 0 : End
;EndSelect
WhichPopupMenuItem()
Case #PB_Event_Gadget
Select EventGadget()
; Hier stehen Gadget-Events
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Hilft dir das weiter?
Außerdem ist dieser Code nicht mehr Windows only.

Re: IsPopupMenuVisible_()?
Verfasst: 21.02.2015 12:07
von Rudi
Nöö, leider auch nicht.
Das Problem werde ich selbst löschen müssen. Muss vorher aber noch den Kopp noch von anderen Dingen freiräumen.
Also, nichts für ungut und danke für den guten Willen!
