Ende von DisplayPopupMenu abfangen?

Anfängerfragen zum Programmieren mit PureBasic.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Ende von DisplayPopupMenu abfangen?

Beitrag 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
Ractur, der mit dem Programmierstil der 80er Jahre :D
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Ende von DisplayPopupMenu abfangen?

Beitrag 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 ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ende von DisplayPopupMenu abfangen?

Beitrag 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:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ende von DisplayPopupMenu abfangen?

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
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: Ende von DisplayPopupMenu abfangen?

Beitrag 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).
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ende von DisplayPopupMenu abfangen?

Beitrag 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. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Ende von DisplayPopupMenu abfangen?

Beitrag von Andesdaf »

RSBasic hat geschrieben:

Code: Alles auswählen

#WM_UNINITMENUPOPUP
danke, das sollte einen uralt-Fehler der PathBar beheben. :praise:
Win11 x64 | PB 6.20
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Re: Ende von DisplayPopupMenu abfangen?

Beitrag von Ractur »

RSBasic hat geschrieben:Aber ich. :D
:allright: Genau nach dem habe ich gesucht! Kniefall :praise: Danke :mrgreen:
Ractur, der mit dem Programmierstil der 80er Jahre :D
Antworten