Ich hab die Delay() Methode aber schon immer verwendet und auch wenn es falsch ist keine Probleme damit gehabt

Grüße Marv
Code: Alles auswählen
Procedure TimerCallback(hWnd, uMsg, idEvent, dwTime)
If idEvent = 2
; Clear the screen and draw our sprites
ClearScreen(RGB(0, 0, 0))
ClipSprite(0, 0, 0, x, x / 8)
DisplaySprite(0, x, 100)
DisplaySprite(0, x, x)
DisplaySprite(0, 300 - x, x)
DisplaySprite(0, playerX, playerY)
FlipBuffers() ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
EndIf
EndProcedure
SetTimer_(WindowID(0), 2, 30, @TimerCallback())
Repeat
Repeat
; Always process all the events to flush the queue at every frame
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
; Do the normal application management here
EndSelect
Until Event = 0 ; Quit the event loop only when no more events are available
;<< hier würd ich mit einem Delay(1) die CPU-Last verringern
Until Quit Or KeyboardPushed(#PB_Key_Escape)
Ich hab ja noch die Hoffnung, dass irgendwann nicht mehr alle Events beim Verschieben von Fenstern ins Nirvana geschickt werden.ts-soft hat geschrieben:Wenns nur für Windows ist, würde ich den API-Timer bevorzugen, dann
wird die Routine auch beim verschieben des Fensters ausgeführt
Hab mir entsprechendes beim Alphatest gewünscht, leider keine Reaktion.HeX0R hat geschrieben: Ich hab ja noch die Hoffnung, dass irgendwann nicht mehr alle Events beim Verschieben von Fenstern ins Nirvana geschickt werden.
Allerdings schwindet diese Hoffnung von Monat zu Monat mehr...
Code: Alles auswählen
EnableExplicit
Enumeration
#But_Start
#But_Stop
#Txt_Count
EndEnumeration
OpenWindow( 0, #PB_Ignore, 0, 300, 200, "Countdown")
ButtonGadget( #But_Start, 16, 16, 80, 24, "Start" )
ButtonGadget( #But_Stop , 16, 48, 80, 24, "Stop" )
TextGadget ( #Txt_Count, 204, 16, 80, 80, "X", #PB_Text_Center|#PB_Text_Border )
Define.i EXIT = 0, COUNT = 0
Define.i Timer, DCounter
Define.i Event, EvGad
Timer = ElapsedMilliseconds() + 1000
Repeat
Event = WaitWindowEvent(100)
EvGad = EventGadget()
Select Event
Case #Null
If COUNT
If ElapsedMilliseconds() > Timer
Timer + 1000
DCounter -1
SetGadgetText( #Txt_Count, Str(DCounter) )
If DCounter = 0
COUNT = 0
EndIf
EndIf
EndIf
Case #PB_Event_CloseWindow
EXIT = 1
Case #PB_Event_Gadget
Select EvGad
Case #But_Start
Timer = ElapsedMilliseconds() + 1000
COUNT = 1
DCounter = 5
SetGadgetText( #Txt_Count, Str(DCounter) )
Case #But_Stop
COUNT = 0
EndSelect
EndSelect
Until EXIT
Code: Alles auswählen
If OpenWindow(0, 200, 200, 400, 200, "Shutdown Control", #PB_Window_TitleBar|#PB_Window_SystemMenu )
If CreateGadgetList(WindowID(0))
TextGadget (5, 10, 28, 200, 15,"Shutdown Status:")
TextGadget (6, 10, 40, 200, 8,"--------------------------------")
ButtonGadget (1, 260, 25, 120 , 24, "Neuer Countdown")
ButtonGadget (2, 260, 120, 120 , 24, "Info")
ButtonGadget (9, 260, 160, 120 , 24, "Exit")
ButtonGadget (3, 20, 160, 80 , 24, "Start")
ButtonGadget (4, 120, 160, 80 , 24, "Stop")
TextGadget (7, 10, 50, 200, 100,"", #PB_Text_Border)
TextGadget (8, 150, 10, 200, 15,"")
;CheckBoxGadget(0, 290, 90, 250, 20, "Neustarten")
OptionGadget (20, 270, 60, 90, 20, "Neustarten")
OptionGadget (21, 270, 80, 90, 20, "Herunterfahren")
SetGadgetState(21, 1)
EndIf
EndIf
(...)
;// Start Main- Programm
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
GadgetNummer = EventGadget()
;// Exit
If GadgetNummer = 9
End
EndIf
;// Info
(...)
;// Start
If GadgetNummer = 3
If Start.l = 1
Repeat
StartTime = ElapsedMilliseconds()
Repeat
Time.l = ElapsedMilliseconds()-StartTime
EventID3 = WindowEvent()
GadgetNummer2 = EventGadget()
;SetGadgetText (7, Str(Time)) // DebugInfo
Until Time.l >= 1000
Sek.l = Sek.l -1
SetGadgetText (7, " Timer gestartet...(H : M : S)" + Chr(10) + Chr(10) + Chr(10) + " " + Str(Hou.l) + ":" + Str(Min.l) + ":" + (Str(Sek.l)))
If Sek.l <= 0
Min.l = Min.l - 1
Sek.l = Sek.l + 60
If Min.l < 0
Min.l = 0
Hou.l = Hou.l - 1
If Hou.l <> 0
;Hou.l = Hou.l -1
Min.l = Min.l + 59
EndIf
If Hou.l <= 0
Hou.l = 0
Min.l = 0
Sek.l = 0
EndIf
EndIf
EndIf
Until Sek.l = 0 Or GadgetNummer2 = 4
EndIf
If GadgetNummer2 = 4
SetGadgetText (7, " Timer gestartet...(H : M : S)" + Chr(10) + Chr(10) + Chr(10) + " " + Str(Hou.l) + ":" + Str(Min.l) + ":" + (Str(Sek.l)) + Chr(10) + Chr(10) + "Timer gestoppt! Zum Fortsetzten 'Start' drücken!")
EndIf
;// Timer beendet
If Sek.l = 0
State = GetGadgetState(20)
If State = 1
;RunProgram("C:\Windows\System32\shutdown.exe","-r -t 10 -f","System wird in 10 Sekunden neu gestartet!")
Else
;RunProgram("C:\Windows\System32\shutdown.exe","-s -t 10 -f","System wird in 10 Sekunden Heruntergefahren!")
EndIf
EndIf
EndIf
;// Neuer Countdown
If GadgetNummer = 1
If OpenWindow(1, 200, 200, 230, 200, "Shutdown Control", #PB_Window_TitleBar|#PB_Window_SystemMenu )
If CreateGadgetList(WindowID(1))
TextGadget (10, 10, 30, 200, 15,"Timer:")
TextGadget (11, 10, 40, 200, 10,"--------------------------------")
ButtonGadget (12, 80, 160, 80 , 24, "Speichern")
StringGadget (14, 30, 60, 40, 20, "")
StringGadget (15, 90, 60, 40, 20, "")
StringGadget (16, 150, 60, 40, 20, "")
EndIf
Eingabe:
Repeat
EventID = WindowEvent()
GadgetNummer = EventGadget()
If GadgetNummer = 12
Sekunden$ = GetGadgetText (16)
Sek.l = Val(Sekunden$)
Minuten$ = GetGadgetText (15)
Min.l = Val(Minuten$)
Hour$ = GetGadgetText (14)
Hou.l = Val(Hour$)
If Sek.l < 0
MessageRequester ("ERROR" , "Falsche Eingabe! Überprüfung erforderlich!")
SetGadgetText (16," ")
Fehler = 1
EndIf
If Min.l < 0
Min.l = 0
MessageRequester ("ERROR" , "Falsche Eingabe! Überprüfung erforderlich!")
SetGadgetText (15," ")
Fehler = 1
EndIf
If Hou.l < 0
Hou.l = 0
MessageRequester ("ERROR" , "Falsche Eingabe! Überprüfung erforderlich!")
SetGadgetText (14," ")
Fehler = 1
EndIf
If Fehler = 1
Fehler = 0
Goto Eingabe:
Else
EventID = 1
EndIf
EndIf
If EventID = #PB_Event_CloseWindow
EventID = 1
EndIf
Until EventID = 1
If Sek.l >= 60
Repeat
Min.l = Min.l + 1
Sek.l = Sek.l - 60
Until Sek.l <= 59
EndIf
If Min.l >= 60
Repeat
Hou.l = Hou.l + 1
Min.l = Min.l - 60
Until Min.l <= 59
EndIf
SetGadgetText (7, "Timer initialisiert... " + Chr(10) + "Timer gestellt auf: " + Str(Hou.l) + ":" + Str(Min.l) + ":" + Str(Sek.l))
Start.l = 1
CloseWindow(1)
;
EndIf
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow
;EndIf