Seite 1 von 1

Event-Loop : Dauerläufer

Verfasst: 16.11.2009 16:52
von Null
Ursprünglich in PB 3.9? geschrieben und lauffähig habe ich nach dem Upgrade auf PB 4.31 den Code angepaßt und bei einem Probelauf folgendes Problem entdeckt :

Ein Klick auf den Button [speichern] führt zu mehrfacheinträgen in die jeweiligen Dateien
Ein Klick auf den Button [suchen] und mein Window flimmert nur noch.

Die Eventloop wird also mehrfach durchlaufen und der jeweilige Button als gedrückt betrachtet. Ein Versuch mit Setgadgetstate(#c105,0) führte ebensowenig weiter, wie das Nullsetzen der Variablen >knopf<

BTW : Die Konstante #c103 müßte den Wert 103 haben, die #c104 -104 und die #c105 - 105.

Hier die Eventschleife :

Code: Alles auswählen

Repeat
  event = WaitWindowEvent()
  knopf = EventGadget()
  
  If event = #PB_Event_CloseWindow
    exit = 1
  EndIf
  
  Select knopf
  
    Case #c103  ;Button SCHLIESSEN
      exit = 1
      
    Case #c104  ;Button SPEICHERN
      speicherntxt()
      Knopf = 0

    Case #c105  ;Button SUCHEN
      lesentxt()
      Maske()
      knopf = 0

  EndSelect
      
Until exit = 1

End
Liebe PB'ler :praise:

Was mache ich falsch???

Re: Event-Loop : Dauerläufer

Verfasst: 16.11.2009 16:57
von X360 Andy

Code: Alles auswählen

 Repeat
   event = WaitWindowEvent()
   knopf = EventGadget()
   
   Select event
     Case #PB_Event_CloseWindow
       
       exit = 1
     Case #PB_Event_Gadget
       
       Select knopf
           
         Case #c103  ;Button SCHLIESSEN
           exit = 1
           
         Case #c104  ;Button SPEICHERN
           speicherntxt()
           Knopf = 0
           
         Case #c105  ;Button SUCHEN
           lesentxt()
           Maske()
           knopf = 0
           
       EndSelect
   EndSelect
 Until exit = 1
 
 End

Re: Event-Loop : Dauerläufer

Verfasst: 16.11.2009 16:58
von Crawler
Was soll denn bitte

Code: Alles auswählen

knopf=0
bewirken?

Re: Event-Loop : Dauerläufer

Verfasst: 16.11.2009 17:07
von Null
@crawler

Wie ich schon erwähnt habe, nimmt das Programm an, daß ich z.B. den Button [suchen] ständig gedrückt habe, der Status des Buttongadget also 1 ist. Dies wollte ich dur das Nullsetzen der Variablen "knopf" verhindern.

Re: Event-Loop : Dauerläufer

Verfasst: 16.11.2009 17:11
von Kaeru Gaman
Andys Antwort enthält die Lösung:
nur dann auf EventGadget() prüfen und reagieren, wenn tatsächlich ein Event = #PB_Event_Gadget anliegt.

die Rückgabe von EventGadget() enthält immer die ID des Gadgets auf dem zuletzt ein Event aufgetreten ist,
auch wenn das aktuelle Event etwas ganz anderes ist.

Re: Event-Loop : Dauerläufer

Verfasst: 16.11.2009 17:13
von Null
Bingo