Seite 1 von 1

Menü blockiert Programm

Verfasst: 14.03.2016 10:31
von techniker
Hi,

ich habe festgestellt, dass wenn man ein Menü im laufenden Programm öffnet selbiges solange "stehen" bleibt..?!?
Kann man dies verhindern?

In meinem Programm muss ich zyklisch (alle 500ms) eine Netzwerk-Aktion ausführen. Bleibt diese aus wird ein Verbindungsabbruch detektiert. :|

Danke!

Re: Menü blockiert Programm

Verfasst: 14.03.2016 10:55
von Bisonte
Entweder lagerst du deine zyklische Netzwerkaktion in einen Thread aus, oder du benutzt AddWindowTimer()

Will heissen ein TimerEvent das alle 500ms ausgelöst wird. Damit sollte das Programm auch bei einem offenem Menü
weiter deine Netzwerkaktion ausführen. (Bei fehlerfreier Event-Behandlung ;) )

Re: Menü blockiert Programm

Verfasst: 14.03.2016 11:08
von matbal
Um genauer zu sein: Benutze AddWindowTimer zusammen mit BindEvent. Der EventLoop hält an, wenn das Menü geöffnet ist oder das Fenster verschoben wird.

Beispiel:

Code: Alles auswählen

EnableExplicit

Enumeration 
   #MainWin
   #MainWin_Menu
   #MainWin_Menu_Item1
   #MainWin_Timer_1
EndEnumeration


Procedure TimerProc()
   Debug "Timer Bindevent"
EndProcedure


OpenWindow(#MainWin, 100, 100, 400, 300, "Programm")

If CreateMenu(#MainWin_Menu, WindowID(0))
   MenuTitle("Datei")
   MenuItem(#MainWin_Menu_Item1, "Menü 1")
EndIf

AddWindowTimer(#MainWin, #MainWin_Timer_1, 500)
BindEvent(#PB_Event_Timer, @TimerProc(), #MainWin, #MainWin_Timer_1)

Repeat
   Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
         Break
         
      Case #PB_Event_Menu
         Select EventMenu()
            Case #MainWin_Menu_Item1
               Debug "Menu 1"
         EndSelect
         
      Case #PB_Event_Timer
         Select EventTimer()
            Case #MainWin_Timer_1
               Debug "Timer"
         EndSelect
         
   EndSelect
ForEver

Re: Menü blockiert Programm

Verfasst: 14.03.2016 11:51
von techniker
Danke matbal! 8)

Der Tipp mit BindEvent ist Gold wert.. :mrgreen: