Procedure wird mehrfach durchlaufen

Anfängerfragen zum Programmieren mit PureBasic.
elko68
Beiträge: 27
Registriert: 26.02.2010 14:50

Procedure wird mehrfach durchlaufen

Beitrag 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 
Windows 7x64 Prof , PureBasic 5.20 LTS
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Procedure wird mehrfach durchlaufen

Beitrag 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 
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Procedure wird mehrfach durchlaufen

Beitrag 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

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
elko68
Beiträge: 27
Registriert: 26.02.2010 14:50

Re: Procedure wird mehrfach durchlaufen

Beitrag von elko68 »

... DANKE - dass wars nun läuft es - komme erstmal weiter. :wink:
Windows 7x64 Prof , PureBasic 5.20 LTS
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Procedure wird mehrfach durchlaufen

Beitrag 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

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten