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
Prüfen ob ein Popupmenu angezeigt wird
-
- Beiträge: 15
- Registriert: 07.08.2012 15:58
Prüfen ob ein Popupmenu angezeigt wird
Purebasic & MIDI - Das taugt!!
Wem meine Musik gefällt - ich freu mich über jeden Download / Kommentar
https://soundcloud.com/schallweller
Wem meine Musik gefällt - ich freu mich über jeden Download / Kommentar
https://soundcloud.com/schallweller
Re: Prüfen ob ein Popupmenu angezeigt wird
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
-
- Beiträge: 15
- Registriert: 07.08.2012 15:58
Re: Prüfen ob ein Popupmenu angezeigt wird
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!
NACHTRAG: Und das 2 Minuten später!! Lichtgeschwindigkeit ist lahm dagegen
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
Wem meine Musik gefällt - ich freu mich über jeden Download / Kommentar
https://soundcloud.com/schallweller