Problem mit Events und dem Menü

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

Frusciante

Betreff: Problem mit Events und dem Menü

BeitragDi, Mai 27, 2008 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich hab ein nerviges Problem mit den Events, speziell mit dem Menü eines Fensters. Zur Übersicht halber habe ich die Funktion WaitEvent in eine eigene Funktion ausgelagert und rufe in der Hauptschleife meine eigene Funktion jeden Schleifendurchlauf 1x auf. Hier erst mal ein bisschen Code wie meine WaitEvent Funktion aufgebaut ist:

Code: [AUSKLAPPEN]


Function Eventhandle()
   

   Select WaitEvent(0)

      Case $205 ;MouseEnter

         Select EventSource()
            Case tilecanvas
               FlushMouse()               
               tilechoice_bool = 1
            Case maincanvas
               FlushMouse()
               tilechoice_bool = 0   
         End Select   
            
         
      Case $401 ;Gadgetaction
         Select EventSource()
            Case slider1

                      SetGadgetShape   tilecanvas,-SliderValue(slider1),0,GadgetWidth(tilecanvas),GadgetHeight(tilecanvas)   
      
         End Select
         
      Case $803 ;WindowClose
         End
         
      Case $203 ;Movemouse
         Select EventSource()
            Case tilecanvas
               tilechoice_bool=1
               Draw_Tilechoice()
            Case maincanvas
               tilechoice_bool=0
         End Select   
         
      Case $1001 ;MenuEvent
         UpdateWindowMenu main
         Select EventData()
            Case 9
               Select MenuChecked(show_collision)
                  Case 0
                     CheckMenu show_collision
                     UpdateWindowMenu main
                     collision_switch = 0
                  Case 1
                     UncheckMenu show_collision
                     UpdateWindowMenu main
                     collision_switch = 1
               End Select
            Case 4 ;saveas
               ;...!
            Case 3 ;save
                              ;...!
            Case 5 ;load
               ;...!
                     
         End Select   
                              
   End Select                  
   
End Function



So, wo ich ein kommentar mit "...!" eingefügt hab, hab ich den original Quellcode rausgenommen damit der Codeschnipsel übersichtlich bleibt. Dort waren If abfragen drin falls das etwas mit meinem Problem zu tun haben könnte. Jetzt zu dem Problem: Die Menüpunkte reagieren teilweise erst beim 2ten mal klicken. Wenn ich Waitevent(0) benutze geht es etwas besser, also funktionieren sie auch häufiger beim ersten klicken. Aber gerade bei der Funktion speichern denke ich ist es wichtig das es ausnahmslos funktioniert. Besonders wenn man versuch einen Menüpunkt schnell anzuklicken passiert häufig gar nichts :/ . Das nächste Problem ist das ich wenn ich WaitEvent(0) (anstatt WaitEvent(1) oder ähnliches) benutze ich mehrmals auf das X zum schließen klicken muss. Dauert dann unterschiedlich lange bis es reagiert. Bei WaitEvent(1) funktionieren die Menüpunkte zwar wieder etwas unregelmäßiger dafür aber der X Button beim ersten mal.

Bin für jede Hilfe dankbar.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Mai 27, 2008 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hört sich an als wenn du WaitEvent an mehreren stellen abfragst und es in dieser Function schon leer ist!

Wie sieht den der Aufruf zur Function Eventhandle() aus?
[BB2D | BB3D | BB+]
 

Frusciante

BeitragDi, Mai 27, 2008 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, also mehrmals rufe ich WaitEvent() auf jedenfall nicht auf, die Funktion Eventhandle() wird immer am Ende der Mainloop ausgeführt

Shogo

BeitragMi, Mai 28, 2008 1:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann so keinen Fehler sehen.
Eine Vermutung auch wenn es sehr unwahrscheinlich ist, ist das du pro Schleifendurchlauf mehrmals Code: [AUSKLAPPEN]
UpdateWindowMenu main
benutzt.
 

Frusciante

BeitragMi, Mai 28, 2008 10:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich führe jeden schleifendurchlauf einmal UpdateWindowMenu main aus. Du meinst jetzt ob ich die Funktion jeden schleifendurchlauf 2 oder mehrmals abrufe, oder?

Mal eine andere Frage: Funktionieren bei euch die Menüs einwandfrei, ohne jegliche Aussetzer? Und hat die Aktivität der Fenster mit der Funktionalität der Menüs etwas zu tun? Also wenn zum beispiele das Aktive Gadget ein Canvas ist und nicht das Fenster an sich?

Shogo

BeitragMi, Mai 28, 2008 12:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich meine das du bei
Code: [AUSKLAPPEN]
Case $1001 ;MenuEvent
         UpdateWindowMenu main


ein Menu update machst und dann

hier noch mal:
Code: [AUSKLAPPEN]
Select MenuChecked(show_collision)
                  Case 0
                     CheckMenu show_collision
                     UpdateWindowMenu main
                     collision_switch = 0
                  Case 1
                     UncheckMenu show_collision
                     UpdateWindowMenu main
                     collision_switch = 1
               End Select


nimm es mal bei case$1001 raus. Das es wirklich nur einmal pro Schleifendurchlauf benutzt wird wenn sich auch wirklich was aendert. Vielleicht hilft es.

Zu deiner Frage, bei mir haben die Menues immer funktioniert.
 

Frusciante

BeitragMi, Mai 28, 2008 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, das war tatsächlich das Problem. Menüs + X funktionieren jetzt einwandfrei.

Danke

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group