Event-Loop : Dauerläufer

Anfängerfragen zum Programmieren mit PureBasic.
Null
Beiträge: 6
Registriert: 28.07.2009 11:24
Computerausstattung: Windows XP
PB 4.31 Demo (noch)
Wohnort: Ba-Wü

Event-Loop : Dauerläufer

Beitrag 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???
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Event-Loop : Dauerläufer

Beitrag 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
Crawler
Beiträge: 110
Registriert: 08.02.2009 19:52
Computerausstattung: PB 4.41
Win7 64bit

Re: Event-Loop : Dauerläufer

Beitrag von Crawler »

Was soll denn bitte

Code: Alles auswählen

knopf=0
bewirken?
PB 4.41 | Win7 64bit
Null
Beiträge: 6
Registriert: 28.07.2009 11:24
Computerausstattung: Windows XP
PB 4.31 Demo (noch)
Wohnort: Ba-Wü

Re: Event-Loop : Dauerläufer

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Event-Loop : Dauerläufer

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Null
Beiträge: 6
Registriert: 28.07.2009 11:24
Computerausstattung: Windows XP
PB 4.31 Demo (noch)
Wohnort: Ba-Wü

Re: Event-Loop : Dauerläufer

Beitrag von Null »

Bingo
Antworten