Re57 hat geschrieben:Kann mir bitte mal jemand einen kurzen Beispiel-Code schreiben, wie man innerhalb einer For-Next-Schleife einen Abbruch z.B. über die Escape-Taste erzeugt?
Dafür kann man dir sicher einen Code schreiben, allerdings würde ich es gerne vermeiden, weil es die falsche Herangehensweise ist.
Daher hier mal ein Beispiel, wie man dein Töne-Abspielen mit Timer lösen kann.
Code: Alles auswählen
Enumeration
#Window
#Gadget_Play
#Gadget_Stop
#Timer
EndEnumeration
OpenWindow(#Window, 0, 0, 200, 40, "Play and Stop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(#Gadget_Play, 10, 10, 80, 20, "Play")
ButtonGadget(#Gadget_Stop, 110, 10, 80, 20, "Stop")
Define Ton.i
Define MaxTon.i = 5
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseWindow(#Window)
End
Case #PB_Event_Timer
Select EventTimer()
Case #Timer
; Es sind 1000 ms vergangen, also "alten" Ton stoppen, Ton um eins erhöhen und "neuen" Ton starten wenn erwünscht, sonst Timer löschen.
Debug "Stop Ton "+Str(Ton) ; hier kommt dein StopSound() hin.
If Ton < MaxTon
Ton + 1
Debug "Play Ton "+Str(Ton) ; hier kommt dein PlaySound() hin.
Else
RemoveWindowTimer(#Window, #Timer)
EndIf
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_Play
; Play setzt Ton auf 1, beginnt das abspielen und erstellt einen Timer mit 1000 ms
Ton = 1
Debug "Play Ton "+Str(Ton) ; hier kommt dein PlaySound() hin.
AddWindowTimer(#Window, #Timer, 1000)
Case #Gadget_Stop
; Stop stoppt das abspielen und löscht den Timer
Debug "Stop Ton "+Str(Ton) ; hier kommt dein StopSound() hin.
RemoveWindowTimer(#Window, #Timer)
EndSelect
EndSelect
ForEver
Edit: Diese Antwort galt einem inzwischen gelöschten Post von Re57