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! :allright: