Seite 1 von 1
Ende von DisplayPopupMenu abfangen?
Verfasst: 28.01.2014 13:38
von Ractur
Hallo,
ich erstelle damit ein Menü im Systray:
Code: Alles auswählen
Case #PB_EventType_RightClick ;Popupmenü bei rechtsklick auf Icon in TaskleisteA
CreatePopupImageMenu(2)
........
wert = 1 ; User im Popupmenü
..........
DisplayPopupMenu(2,WindowID(0)) ; Popup anzeigen
Das funktioniert soweit prima!
Für eine andere Schleife benötige ich jedoch den wert = 0, wenn das Popupmenü im Systray wieder verlassen wurde.
Hat jemand eine Idee wie ich feststellen kann ob der User das Popupmenü verlassen hat und die Variable "wert" auf 0 setze?!
Danke schon mal!
Matthias
Re: Ende von DisplayPopupMenu abfangen?
Verfasst: 28.01.2014 21:16
von Bisonte
Meiner Meinung nach bleibt die Abarbeitung stehen, sobald das Menu aufpoppt. Erst wenn es zugeht (woanders hinklicken oder Punt auswählen) geht es weiter.
Aber ich kann mich irren

Re: Ende von DisplayPopupMenu abfangen?
Verfasst: 28.01.2014 21:35
von NicTheQuick
Leider weiß ich auch keine Lösung dafür, aber ich wollte noch etwas anderes anmerken.
Üblicherweise erstellt man ein PopupMenu nur einmal und zeigt es dann beliebig oft an. Man erstellt also nicht bei jedem Rechtsklick ein neues Menü.
Die Ausnahme wäre allerdings, wenn man zum Zeitpunkt des Klicks erst weiß, was man überhaupt anzeigen will. Dann geht es natürlich nicht anders.

Re: Ende von DisplayPopupMenu abfangen?
Verfasst: 28.01.2014 21:40
von RSBasic
Aber ich.
Code: Alles auswählen
EnableExplicit
Define EventID
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_UNINITMENUPOPUP
Debug "PopupMenu wurde geschlossen."
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreatePopupMenu(1)
MenuItem(1, "Hallo")
MenuItem(2, "Welt")
EndIf
AddSysTrayIcon(1, WindowID(0), LoadImage(0,#PB_Compiler_Home + "examples\sources\Data\CdPlayer.ico"))
SetWindowCallback(@WinCallback())
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_SysTray
Select EventType()
Case #PB_EventType_RightClick
DisplayPopupMenu(1, WindowID(0))
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Re: Ende von DisplayPopupMenu abfangen?
Verfasst: 28.01.2014 21:43
von ts-soft
NicTheQuick hat geschrieben:Die Ausnahme wäre allerdings, wenn man zum Zeitpunkt des Klicks erst weiß, was man überhaupt anzeigen will. Dann geht es natürlich nicht anders.

Das ist bei einem Contextmenü aber der Standard

, deshalb Contextmenü. Allerdings beim Systray gibt es wohl eher weniger Änderungen.
Zur Eigentlichen Frage, hat Bisonta ja schon richtig erkannt, Popupmenü hält die Anwendung an, das setzen auf 0 kann also unmittelbar nach der Anzeige erfolgen (der Sinn des ganzen entzieht sich mir hier aber).
Re: Ende von DisplayPopupMenu abfangen?
Verfasst: 29.01.2014 15:54
von RSBasic
ts-soft hat geschrieben:Zur Eigentlichen Frage, hat Bisonta ja schon richtig erkannt, Popupmenü hält die Anwendung an.
Um genau zu sein, nur die Eventschleife des Fensters, aber Callbacks (einschließlich BindEvent) und Threads werden nicht unterbrochen oder angehalten.

Re: Ende von DisplayPopupMenu abfangen?
Verfasst: 29.01.2014 20:01
von Andesdaf
danke, das sollte einen uralt-Fehler der PathBar beheben.

Re: Ende von DisplayPopupMenu abfangen?
Verfasst: 30.01.2014 15:48
von Ractur
RSBasic hat geschrieben:Aber ich.

Genau nach dem habe ich gesucht! Kniefall

Danke
