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. :wink:

Re: Ende von DisplayPopupMenu abfangen?

Verfasst: 28.01.2014 21:40
von RSBasic
Aber ich. :D

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. :wink:
Das ist bei einem Contextmenü aber der Standard :wink: , 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
RSBasic hat geschrieben:

Code: Alles auswählen

#WM_UNINITMENUPOPUP
danke, das sollte einen uralt-Fehler der PathBar beheben. :praise:

Re: Ende von DisplayPopupMenu abfangen?

Verfasst: 30.01.2014 15:48
von Ractur
RSBasic hat geschrieben:Aber ich. :D
:allright: Genau nach dem habe ich gesucht! Kniefall :praise: Danke :mrgreen: