Seite 1 von 1

Procedure wird mehrfach durchlaufen

Verfasst: 25.07.2013 13:33
von elko68
Hallo,

nach einiger Zeit versuche ich mich nun tiefer mit PB zu befassen :)

Ich habe mal eine einfache Programmstruktur erstellt die auch vom Prinzip funktioniert.
Nun tritt aber ein Effekt auf - die Prozeduren "Programmteildummy" werden nach dem Betätigen des zuständigen Button mehrfach ausgeführt :roll:
Was ist da faul ?

Danke
Gruß Frank

Code: Alles auswählen

; Testprogramm ACB - Controller

EnableExplicit       ;nur explizit def Variablen sind erlaubt
Define EventID.l      ;EventID = Variable zum Abfragen in der Event-Schleife -> Repeat
EventID = 0

Procedure OpenWindow_0() ;Hauptfenster
  OpenWindow(1, 100, 100, 600, 400, "ACB - Controller Test01", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ;Hauptfenster
ProcedureReturn  
EndProcedure

Procedure Set_Button() ;Button setzen
  ButtonGadget(2, 10, 50, 50, 50, "160 m") ;Button_160
  ButtonGadget(3, 90, 50, 50, 50, "80 m") ;Button_80
  ButtonGadget(4, 170, 50, 50, 50, "40 m") ;Button_40
  ButtonGadget(5, 250, 50, 50, 50, "30 m") ;Button_30 
EndProcedure  

Procedure Set_160m() ;Programmteildummy
  PrintN("TUNED 160m")
  Delay(1000)
EndProcedure

Procedure Set_80m() ;Programmteildummy
  PrintN("TUNED 80m")
  Delay(1000)
EndProcedure

Procedure Set_40m() ;Programmteildummy
  PrintN("TUNED 40m")
  Delay(1000)
EndProcedure

Procedure Set_30m() ;Programmteildummy
  PrintN("TUNED 30m")
  Delay(1000)
EndProcedure

OpenConsole() ;Console zum Test der Proceduren

OpenWindow_0() ;Hauptfenster erstellen
Set_Button()    ;Button setzen
   Repeat 
     EventID = WaitWindowEvent()       ;Event aus Hauptfenster abwarten
     
     Select EventGadget() ;Auswertung der Button und Aufruf der Unterprogramme
       Case 2
        Set_160m() 
       Case 3
        Set_80m() 
       Case 4
        Set_40m() 
       Case 5
        Set_30m() 
     EndSelect
   Until EventID = #PB_Event_CloseWindow 
  
End 

Re: Procedure wird mehrfach durchlaufen

Verfasst: 25.07.2013 14:02
von _JON_
Du musst erst prüfen was für ein Event gemeldet wird.

Code: Alles auswählen

 Repeat 
     EventID = WaitWindowEvent()       ;Event aus Hauptfenster abwarten
     
     Select EventID
       Case #PB_Event_Gadget
        Select EventGadget() ;Auswertung der Button und Aufruf der Unterprogramme
          Case 2
            Set_160m() 
          Case 3
            Set_80m() 
          Case 4
            Set_40m() 
          Case 5
            Set_30m() 
        EndSelect
    
    EndSelect
    
   Until EventID = #PB_Event_CloseWindow 

Re: Procedure wird mehrfach durchlaufen

Verfasst: 25.07.2013 14:07
von mk-soft
Es muss der Eventtype ausgewertet werden.

In einer Event-Schleife DARF NIE ein Delay verwendet werden.

Code: Alles auswählen

; Testprogramm ACB - Controller

EnableExplicit       ;nur explizit def Variablen sind erlaubt
Define EventID.l      ;EventID = Variable zum Abfragen in der Event-Schleife -> Repeat
EventID = 0

Procedure OpenWindow_0() ;Hauptfenster
  OpenWindow(1, 100, 100, 600, 400, "ACB - Controller Test01", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ;Hauptfenster
ProcedureReturn 
EndProcedure

Procedure Set_Button() ;Button setzen
  ButtonGadget(2, 10, 50, 50, 50, "160 m") ;Button_160
  ButtonGadget(3, 90, 50, 50, 50, "80 m") ;Button_80
  ButtonGadget(4, 170, 50, 50, 50, "40 m") ;Button_40
  ButtonGadget(5, 250, 50, 50, 50, "30 m") ;Button_30
EndProcedure 

Procedure Set_160m() ;Programmteildummy
  PrintN("TUNED 160m")
EndProcedure

Procedure Set_80m() ;Programmteildummy
  PrintN("TUNED 80m")
EndProcedure

Procedure Set_40m() ;Programmteildummy
  PrintN("TUNED 40m")
EndProcedure

Procedure Set_30m() ;Programmteildummy
  PrintN("TUNED 30m")
EndProcedure

OpenConsole() ;Console zum Test der Proceduren

OpenWindow_0() ;Hauptfenster erstellen
Set_Button()    ;Button setzen
   Repeat
     EventID = WaitWindowEvent()       ;Event aus Hauptfenster abwarten
     
     Select EventGadget() ;Auswertung der Button und Aufruf der Unterprogramme
       Case 2
         Select EventType()
           Case #PB_EventType_LeftClick : Set_160m()
         EndSelect
       Case 3
         Select EventType()
           Case #PB_EventType_LeftClick : Set_80m()
         EndSelect
       Case 4
         Select EventType()
           Case #PB_EventType_LeftClick : Set_40m()
         EndSelect
       Case 5
         Select EventType()
           Case #PB_EventType_LeftClick : Set_30m()
         EndSelect
           
     EndSelect
   Until EventID = #PB_Event_CloseWindow
 
End


Re: Procedure wird mehrfach durchlaufen

Verfasst: 25.07.2013 14:13
von elko68
... DANKE - dass wars nun läuft es - komme erstmal weiter. :wink:

Re: Procedure wird mehrfach durchlaufen

Verfasst: 25.07.2013 14:17
von mk-soft
Fehlt noch was

Code: Alles auswählen

; Testprogramm ACB - Controller

EnableExplicit       ;nur explizit def Variablen sind erlaubt
Define EventID.l      ;EventID = Variable zum Abfragen in der Event-Schleife -> Repeat
EventID = 0

Procedure OpenWindow_0() ;Hauptfenster
  OpenWindow(1, 100, 100, 600, 400, "ACB - Controller Test01", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ;Hauptfenster
ProcedureReturn 
EndProcedure

Procedure Set_Button() ;Button setzen
  ButtonGadget(2, 10, 50, 50, 50, "160 m") ;Button_160
  ButtonGadget(3, 90, 50, 50, 50, "80 m") ;Button_80
  ButtonGadget(4, 170, 50, 50, 50, "40 m") ;Button_40
  ButtonGadget(5, 250, 50, 50, 50, "30 m") ;Button_30
EndProcedure 

Procedure Set_160m() ;Programmteildummy
  PrintN("TUNED 160m")
EndProcedure

Procedure Set_80m() ;Programmteildummy
  PrintN("TUNED 80m")
EndProcedure

Procedure Set_40m() ;Programmteildummy
  PrintN("TUNED 40m")
EndProcedure

Procedure Set_30m() ;Programmteildummy
  PrintN("TUNED 30m")
EndProcedure

OpenConsole() ;Console zum Test der Proceduren

OpenWindow_0() ;Hauptfenster erstellen
Set_Button()    ;Button setzen
   Repeat
     EventID = WaitWindowEvent()       ;Event aus Hauptfenster abwarten
     
     Select EventID
       Case #PB_Event_Gadget
         
       Select EventGadget() ;Auswertung der Button und Aufruf der Unterprogramme
         Case 2
           Select EventType()
             Case #PB_EventType_LeftClick : Set_160m()
           EndSelect
         Case 3
           Select EventType()
             Case #PB_EventType_LeftClick : Set_80m()
           EndSelect
         Case 4
           Select EventType()
             Case #PB_EventType_LeftClick : Set_40m()
           EndSelect
         Case 5
           Select EventType()
             Case #PB_EventType_LeftClick : Set_30m()
           EndSelect
             
       EndSelect
       
   EndSelect
   
   Until EventID = #PB_Event_CloseWindow
 
End