Also bei Dir können keine Events abgearbeitet werden...
1. WaitWindowEvent()
Solange sich an deinem Fenster nichts tut, wird dort verharrt.... geht also nicht weiter.
Abhile schafft der TimeOut in ms. Hier z.B. WaitWindowEvent(20), heisst : wenn innerhalb von
20 ms kein Event anliegt mach ich trotzdem weiter...
2. innerhalb deiner "Eventschleife" ist eine Repeat ... Until Schleife die erst verlassen wird, wenn
die Uhrzeit erreicht ist... also wieder keine Abarbeitung der WindowEvents...
Bei Fenstern ist es wichtig, Events aus der Warteschlange zu holen, weil sonst das Fenster "hängt".
Das geschieht am besten mit einer Schleife, die dauernd läuft (bis eine Bestimmte Bedingung eintritt
die du abfragen willst).
In deinem Falle willst du aufhören Events aus der Warteschlange zu holen, wenn die Zeit erreicht ist.
Also überprüfst Du lediglich, ob die Zeit erreicht wurde und springst dann aus der Event-Schleife.
Ich habe mir die Freiheit genommen, anhand deines Beispiels das zu erläutern
Code: Alles auswählen
If OpenWindow(0, 524, 239, 171, 166, "Wecker", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
StringGadget(1, 40, 50, 90, 20, "")
ButtonGadget(2, 40, 75, 90, 15, "Ok")
TextGadget(3, 40, 30, 90, 15, "Uhrzeit:")
EndIf
Pattern$ = "Musik (*.mp3)"
Pattern = 0
Repeat
EventID = WaitWindowEvent() ; <---- Hier wird solange gewartet bis ein Event eintritt (Klick oder Fenster verschieben usw.)
If EventID = #PB_Event_CloseWindow; <--- Dieser Teil ist richtig ;)
Quit = 1
EndIf
If EventID = #PB_Event_Gadget ; <-- sieht noch gut aus
If EventGadget()=2
zeit$ = GetGadgetText(1)
Repeat ;----------------------------- aber hier .... Hier werden nur drei zeilen abgeklappert
uhrzeit$ = FormatDate("%hh:%ii", Date());--- aber innerhalb dieser zeilen ist kein "Event abholen" mit drin
Until uhrzeit$ = zeit$ ;--------------------- deswegen "hängt" es hier, bis die zeit erreicht ist
Buffer$=Space(128) ; und das lagert man am besten ausserhalb der Eventschleife....
mciSendString_("OPEN bspmusikstueck TYPE MpegVideo ALIAS MP3",Buffer$,128,0)
mciSendString_("PLAY MP3",0,0,0)
EndIf
EndIf
Until Quit=1
und nun eine kleine demonstration wie es besser sein sollte...
Code: Alles auswählen
If OpenWindow(0, 524, 239, 171, 166, "Wecker", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
StringGadget(1, 40, 50, 90, 20, "")
ButtonGadget(2, 40, 75, 90, 15, "Ok")
TextGadget(3, 40, 30, 90, 15, "Uhrzeit:")
EndIf
Pattern$ = "Musik (*.mp3)"
Pattern = 0
Repeat
EventID = WaitWindowEvent(20) ; <--- hier werden nur 20ms gewartet, wenn dann nix passiert ist gehts weiter
If EventID = #PB_Event_CloseWindow
Quit = 2 ;<--- hier eine neue Abbruch bedingung, damit die musik nur
EndIf ;<----gespielt wird, wenn die zeit auch erreicht wurde und nicht weil das fenster zuging
If EventID = #PB_Event_Gadget
If EventGadget()=2 ;<-- hier wird nur der zeit$ der Inhalt des Stringgadgets übergeben, mehr
zeit$ = GetGadgetText(1) ;<-- ist nicht nötig
EndIf
EndIf
uhrzeit$ = FormatDate("%hh:%ii", Date()); <-- hier klappern wir mal ein wenig mit der Uhr, damit wir was zum prüfen haben...
If uhrzeit$ = zeit$ ; hier prüfen wir nur noch ob die zeit erreicht wurde und machen eine neue
Quit = 1 ;<.... abbruchbedingung die wir gleich abfragen können....
EndIf
Until Quit>0 ; <--- AHA hier ist ende wenn Quit Grösser als 0 ist, also wenn fenster zu oder zeit erreicht
If Quit = 1 ; hier fragem wir bloss noch nach ob in der schleife die zeit erreicht war
Buffer$=Space(128)
mciSendString_("OPEN bspmusikstueck TYPE MpegVideo ALIAS MP3",Buffer$,128,0)
mciSendString_("PLAY MP3",0,0,0)
EndIf
; ansonsten dann das glorreiche
End
Hoffe ein wenig die Dunkelheit ausgeleuchtet zu haben
P.S.: Über Sinn oder Unsinn dieser Programmzeilen lässt sich streiten und dient nur zur Veranschaulichung
