IsPopupMenuVisible_()?

Anfängerfragen zum Programmieren mit PureBasic.
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: IsPopupMenuVisible_()?

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
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: IsPopupMenuVisible_()?

Beitrag 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 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: IsPopupMenuVisible_()?

Beitrag 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.
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: IsPopupMenuVisible_()?

Beitrag 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ü?
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: IsPopupMenuVisible_()?

Beitrag von Rudi »

Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Autonomus
Beiträge: 30
Registriert: 20.02.2015 18:21

Re: IsPopupMenuVisible_()?

Beitrag 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. ;-)
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
  • OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64

    CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
    RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: IsPopupMenuVisible_()?

Beitrag 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:
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Antworten