PopUp Menü

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

PopUp Menü

Beitrag von Darie »

Hallo Leute !!!

Ich würde gerne, dass mein Programm beendet wird, falls kein Eintrag in dem PopUp Menü ausgewählt wurde, also wenn man z.B. neben das Menü klickt. Dann verschwindet ja das Popup Menü von alleine. Dieses Ereignis würde ich gerne abfangen. Bin echt am verzweifeln. Bitte helft mir. Danke!
Mein Fenster soll letztendlich auch noch unsichtbar sein, sodass nur das PopUp Menü aufgeht...

Code: Alles auswählen

If OpenWindow(0, 10, 10, 100, 100, "PopUp") : Else : End : EndIf ;,#PB_Window_Invisible
If CreatePopupMenu(0)
  MenuItem(1, "Cut")
  MenuItem(2, "Copy")
  MenuItem(3, "Paste")
 EndIf

DisplayPopupMenu(0, WindowID(0))
    

Repeat
  
 Event = WaitWindowEvent()
  
 If Event = #PB_Event_Menu 

  Select EventMenu()      
     Case 1 : Debug "Cut"
     Case 2 : Debug "Copy"
     Case 3 : Debug "Paste"
   EndSelect
   Debug "geklickt" : Quit = 1   
   
 EndIf
 
 
Until Quit = 1 Or Event = #PB_Event_CloseWindow
Repeat
PureBasic
ForEver
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: PopUp Menü

Beitrag von bobobo »

ein

Code: Alles auswählen

Debug Event 
hinter der EventZuweisung könnte Dir auf die Sprünge helfen
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
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: PopUp Menü

Beitrag von ts-soft »

Code: Alles auswählen

If OpenWindow(0, 10, 10, 100, 100, "PopUp") : Else : End : EndIf ;,#PB_Window_Invisible
If CreatePopupMenu(0)
  MenuItem(1, "Cut")
  MenuItem(2, "Copy")
  MenuItem(3, "Paste")
EndIf

DisplayPopupMenu(0, WindowID(0))
   

Repeat
 
Event = WaitWindowEvent()
 
If Event = #PB_Event_Menu
  Quit = 0
  Select EventMenu()     
     Case 1 : Debug "Cut"
     Case 2 : Debug "Copy"
     Case 3 : Debug "Paste"
     Default :  Quit = 1
   EndSelect
   
EndIf


Until Quit = 1 Or Event = #PB_Event_CloseWindow 
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
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: PopUp Menü

Beitrag von Darie »

Dein Code macht leider immer noch nicht, was ich möchte:

Wenn ein Eintrag gewählt wurde, soll etwas ausgeführt werden (debug "copy") und danach das Programm enden. Falls aber, das Menü verschwindet, weil der User woanders hinklickt, soll das Programm ebenso beendet werden. Das mit Default klappt leider nicht, hab ich schon versucht. Wenn ich EventMenu debugge, gibts irgendwie keinen passenden Wert, ders sagt, dass nichts ausgewählt wurde.

Wenn ich Event debugge :

13104 -> FensterHandle, oder ?
15 ?
5 ?
3 ?
13101 Handle vom Menü ?
2 ausgewählter Eintrag, aber was wenn nichts gewählt wurde?

Mir ist auch neu, das debug Event jetzt mehrere Werte ausspuckt. War früher glaub ich nur ein Wert. Sorry, aber ich blick momentan echt nicht mehr durch.
Repeat
PureBasic
ForEver
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: PopUp Menü

Beitrag von edel »

Du hast leider nicht geschrieben welches Betriebssystem du benutzt, aber vielleicht hilft dir eine Loesung fuer Windows

Code: Alles auswählen

#TPM_RETURNCMD = $100

If OpenWindow(0, 10, 10, 100, 100, "PopUp") : Else : End : EndIf ;,#PB_Window_Invisible

If CreatePopupMenu(0)
    MenuItem(1, "Cut")
    MenuItem(2, "Copy")
    MenuItem(3, "Paste")
EndIf

Repeat
    
    Event = WaitWindowEvent()
    
    If Event = #WM_RBUTTONUP
        
        GetCursorPos_(@p.point)
        
        Select TrackPopupMenu_(MenuID(0), #TPM_RETURNCMD, p\x, p\y, 0, WindowID(0), 0)
            Case 0 : Debug "Fail"    : Quit = #True 
            Case 1 : Debug "Cut"
            Case 2 : Debug "Copy"
            Case 3 : Debug "Paste"
        EndSelect
        
    EndIf
    
    
Until Quit = 1 Or Event = #PB_Event_CloseWindow
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: PopUp Menü

Beitrag von ts-soft »

Wenn ich Ihn richtig verstanden habe, eher so:

Code: Alles auswählen

#TPM_RETURNCMD = $100

If OpenWindow(0, 10, 10, 100, 100, "PopUp") : Else : End : EndIf ;,#PB_Window_Invisible

If CreatePopupMenu(0)
  MenuItem(1, "Cut")
  MenuItem(2, "Copy")
  MenuItem(3, "Paste")
EndIf

Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #WM_RBUTTONUP
    
    GetCursorPos_(@p.point)
    Quit = #True
    Select TrackPopupMenu_(MenuID(0), #TPM_RETURNCMD, p\x, p\y, 0, WindowID(0), 0)
      Case 1 : Debug "Cut"
      Case 2 : Debug "Copy"
      Case 3 : Debug "Paste"
    EndSelect
    
  EndIf
  
  
Until Quit = 1 Or Event = #PB_Event_CloseWindow
Aber so ganz blicke ich da auch nicht durch :mrgreen:
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
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: PopUp Menü

Beitrag von Darie »

Danke Edel !!! Jetzt funktionierts !

Code: Alles auswählen

#TPM_RETURNCMD = $100

If OpenWindow(0, 10, 10, 100, 100, "PopUp") : Else : End : EndIf ;,#PB_Window_Invisible

If CreatePopupMenu(0)
    MenuItem(1, "Cut")
    MenuItem(2, "Copy")
    MenuItem(3, "Paste")
EndIf

GetCursorPos_(@p.point)

Repeat
   
    Event = WaitWindowEvent()
     
    Select TrackPopupMenu_(MenuID(0), #TPM_RETURNCMD, p\x, p\y, 0, WindowID(0), 0)
     Case 0 : Debug "Fail" : End
     Case 1 : Debug "Cut" 
     Case 2 : Debug "Copy"
     Case 3 : Debug "Paste"
   EndSelect
   Quit = 1
         
Until Quit = 1 Or Event = #PB_Event_CloseWindow
Zuletzt geändert von Darie am 05.10.2010 19:46, insgesamt 1-mal geändert.
Repeat
PureBasic
ForEver
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: PopUp Menü

Beitrag von PureLust »

Das hier wäre mein kleiner schmutziger Vorschlag gewesen, aber wie ich gesehen habe gibt's hier ja schon 'ne menge bessere Lösungen. :mrgreen:

Code: Alles auswählen

#WinMain          = 0
#PopUp_TimeOut    = 0
PopUp_SelectionOK = #False

If OpenWindow(#WinMain, 10, 10, 140, 100, "PopUp") : Else : End : EndIf ;,#PB_Window_Invisible
ButtonGadget(0,10,10,120,30,"Open PopUp")

PopupDisplayed = #False
If CreatePopupMenu(0)
  MenuItem(1, "Cut")
  MenuItem(2, "Copy")
  MenuItem(3, "Paste")
EndIf

Repeat
	Event = WaitWindowEvent()
	
	Select Event
		Case #PB_Event_Gadget
			If EventGadget() = 0
				DisplayPopupMenu(0, WindowID(#WinMain))
				AddWindowTimer(#WinMain,#PopUp_TimeOut,50)
				PopUp_SelectionOK = #False
			EndIf
		Case #PB_Event_Timer
			If Not PopUp_SelectionOK
				Quit = #True
			EndIf
		Case #PB_Event_Menu
			Quit = 0
			Select EventMenu()     
				Case 1 : Debug "Cut"
					PopUp_SelectionOK = #True
				Case 2 : Debug "Copy"
					PopUp_SelectionOK = #True
				Case 3 : Debug "Paste"
					PopUp_SelectionOK = #True
			EndSelect
	EndSelect

Until Quit = 1 Or Event = #PB_Event_CloseWindow
@edel: TrackPopupMenu_(MenuID(0), #TPM_RETURNCMD, p\x, p\y, 0, WindowID(0), 0) ... sehr schicke Sache. :shock:
Zuletzt geändert von PureLust am 05.10.2010 19:49, insgesamt 1-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: PopUp Menü

Beitrag von Rudi »

Fehlt da nicht noch die Unsichtbarkeit?

Code: Alles auswählen

 If OpenWindow(0, 10, 10, 100, 100, "PopUp") : Else : End : EndIf ;,#PB_Window_Invisible
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE) | #WS_EX_LAYERED)
  SetLayeredWindowAttributes_(WindowID(0), 0, 1, #LWA_ALPHA)
...
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: PopUp Menü

Beitrag von Darie »

Genau, ich hab mich zu früh gefreut, wenn ich das Fenster jetzt noch unsichtbar mache, dann gibts doch kein "Fail" mehr. :(
Ihr fragt euch bestimmt, warum da ganze. Naja, ich möchte gerne für mein Grafiktablett ein Kontextmenü ersetzen, da bei diesem Wacomtreiber das Kontextmenü nur auf einer der Stiftknöpfe gelegt werden kann. Mann kann aber den Knöpfen auf dem Tablet eine Anwendung zuweisen. Deswegen möchte ich, dass dann mein Programm aufgerufen wird, dass lediglich ein Popupmenü öffnet und dann ein Shortcut an ein bestimmtes Fenster gesendet wird... >_<

Gruss
Alexander

@Rudi: Danke Rudi, mit deinen Codezeilen ist mein Vorhaben gerettet.

Mann, programmieren kann echt hart sein :?
Repeat
PureBasic
ForEver
Antworten