Seite 1 von 2
PopUp Menü
Verfasst: 05.10.2010 18:53
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
Re: PopUp Menü
Verfasst: 05.10.2010 18:57
von bobobo
ein
hinter der EventZuweisung könnte Dir auf die Sprünge helfen
Re: PopUp Menü
Verfasst: 05.10.2010 18:57
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
Re: PopUp Menü
Verfasst: 05.10.2010 19:09
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.
Re: PopUp Menü
Verfasst: 05.10.2010 19:29
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
Re: PopUp Menü
Verfasst: 05.10.2010 19:39
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

Re: PopUp Menü
Verfasst: 05.10.2010 19:40
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
Re: PopUp Menü
Verfasst: 05.10.2010 19:45
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.
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.

Re: PopUp Menü
Verfasst: 05.10.2010 19:49
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)
...
Re: PopUp Menü
Verfasst: 05.10.2010 19:59
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
