Prüfen ob ein Popupmenu angezeigt wird

Für allgemeine Fragen zur Programmierung mit PureBasic.
schallweller
Beiträge: 15
Registriert: 07.08.2012 15:58

Prüfen ob ein Popupmenu angezeigt wird

Beitrag von schallweller »

Irgendwie finde ich hier keine Lösung. Ich erstelle dynamisch ein PopupMenu von einer XML und lege die Zeiger zu den XML-Einträgen in einer Liste ab um diese bei Klick nachher auszuwerten. Dafür habe ich einen Tastatur-Shortcut drangebunden um das Popup zu generieren und anzuzeigen.

Wenn jetzt das Popupmenü bereits angezeigt wird und man trotzdem nochmal den Tastenbefehl zum öffnen des Popups drückt stürzt meine Software halt ab, da das momentan angezeigte Popup noch nicht freigegeben wurde. Soweit so klar.

Zwar kann ich beim Anzeigen des Menüs eine "Bin-Da!"-Variable auf 1 setzen und nach Anklicken eines Eintrages diese auch wieder auf 0 setzen - aber was mach ich, wenn das Popup ohne Auswahl geschlossen wird durch einfaches danebenklicken. In dem Fall gibt es meines Wissens nach weder ein Event dafür noch eine Abfragefunktion, die prüft ob ein PopupMenü momentan angezeigt wird oder nicht.

Scheiße - irgendwas überseh ich da oder? Ich kann mir schon denken, dass es irgendwie mit API und Windowfunktionen gehen kann. Sprich das Top-Window handle abfragen oder so. Aber irgendwie gefällt mir das nicht.

IsMenu() hilft ja auch nicht, da es ja nach wie vor existiert und nur nicht angezeigt wird. Man, so eine IsPopupDisplayed(PopupID) Funktion würde PB gerade echt gut stehen :)
Purebasic & MIDI - Das taugt!!
Wem meine Musik gefällt - ich freu mich über jeden Download / Kommentar
https://soundcloud.com/schallweller
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Prüfen ob ein Popupmenu angezeigt wird

Beitrag von RSBasic »

Code: Alles auswählen

EnableExplicit

Procedure WinCallback(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_INITMENUPOPUP
      Debug "PopupMenu wurde geöffnet."
    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
 
  SetWindowCallback(@WinCallback())
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_RightClick
        DisplayPopupMenu(1, WindowID(0))
      Case #PB_Event_CloseWindow
        End
    EndSelect
  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
schallweller
Beiträge: 15
Registriert: 07.08.2012 15:58

Re: Prüfen ob ein Popupmenu angezeigt wird

Beitrag von schallweller »

Ha! Der Hammer! Na klar! Den Windowcallback hatte ich garnicht mehr aufm Schirm. Klassischer Fall von Betriebsblindheit. Dank Dir recht herzlich dafür! Vorallem das Du mir gleich nen Code servierst...klasse!

:bounce:

NACHTRAG: Und das 2 Minuten später!! Lichtgeschwindigkeit ist lahm dagegen :)
Purebasic & MIDI - Das taugt!!
Wem meine Musik gefällt - ich freu mich über jeden Download / Kommentar
https://soundcloud.com/schallweller
Antworten