Ich programmiere gerade einen SleepHelper der die beste Aufwachzeit errechnet. Eigentlich geht es mir bei dem Programm nicht um die Funktion an sich sonder ausschließlich um die GUI (Ich will danach was ähnliches Programmieren, mit einer noch übertriebeneren GUI und ich will da erstmal ein paar Erfahrungen sammeln). Und genau die bugt gerade umher.
Manchmal bekomme ich ein Lesefehler bei ExamineMouse() und manchmal bei FlipBuffers() nachdem ich per ESC das Programm geschlossen habe.
Ich schick euch mal den Code, vielleicht habt ihr ja eine Idee was daran nicht stimm soll...
Code: Alles auswählen
Global From = #True
Global MouseOverINPUTButton = #False
Enumeration
#TitelFont
#StandartUmrandungsFont
#DATAUmrandungsFont
EndEnumeration
#StandartFontColor = 16776960
#StandartFrontColor = 16776960
#Backcolor = 5456896
#MouseOverButtonColor = 10190848
#EEGUmrandungsTextHoehe = 15
#EEG1UmrandungsTextBreite = 70
#EEG2UmrandungsTextBreite = 98
#SYNCUmrandungsTextBreite = 98
#DATAUmrandungsTextHoehe = 19
#DATAINPUTUmrandungsTextBreite = 90
#DATAOUTPUTUmrandungsTextBreite= 99
#DATAINPUTFROMLength = 28
#DATAINPUTTOLength = 14
Procedure Error(Erg,String.s)
If Erg = 0
MessageRequester("Error",String)
End
EndIf
ProcedureReturn Erg
EndProcedure
Global Window
Window = Error(OpenWindow(#PB_Any,30,30,1200,650,"Sleep Helper"),"Konnte Fenster nicht öffnen")
Error(InitSprite(),"Konnte Sprites nicht initiieren")
Error(OpenWindowedScreen(WindowID(Window),0,0,1200,650),"Konnte den Screen nicht öffnen")
Error(InitMouse(),"Konnte die Maus nicht initiieren")
Error(InitKeyboard(),"Konnte die Tastatur nicht initiieren")
Error(LoadFont(#TitelFont,"Consolas", 24, #PB_Font_Bold),"Konnte Titelfont nicht laden")
Error(LoadFont(#StandartUmrandungsFont,"Consolas", 10),"Konnte die Umrandungsfont nicht laden")
Error(LoadFont(#DATAUmrandungsFont,"Consolas", 12),"Konnte die DATA-Umrandungsfont nicht laden")
Procedure Wave(Param)
Wavesprite = Error(CreateSprite(#PB_Any,900,160),"Konnte das Wellensprite nicht erstellen")
EndProcedure
Procedure MouseHandler(Param)
WhatThaFuck:
Repeat
If 0 = ExamineMouse()
Debug "HELP"
Delay(50)
Goto WhatThaFuck
EndIf
MouseX = WindowMouseX(Window)
MouseY = WindowMouseY(Window)
If MouseButton(#PB_MouseButton_Left) ;Linke Maustaste gedrückt
If MouseX < 827 And MouseX > 813 ;Vertikal im Bereich der Checkboxen vom DATA-INPUT
If MouseY < 77 And MouseY > 63 ;Es wurde im Bereich der FROM-Checkbox geklickt
From = #True
ElseIf MouseY < 117 And MouseY > 103 ;Es wurde im Bereich der TO-Checkbox geklickt
From = #False
EndIf
EndIf
EndIf
If Mousex < 1180 And MouseX > 1090 And MouseY < 105 And MouseY > 75 ;MouseOver DATAINPUT Button
MouseOverINPUTButton = #True
Else
MouseOverINPUTButton = #False
EndIf
Delay(5)
ForEver
EndProcedure
Procedure KeyboardHandler(Param)
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
Delay(5)
ForEver
EndProcedure
CreateThread(@MouseHandler(),0)
CreateThread(@KeyboardHandler(),0)
Repeat
StartDrawing(ScreenOutput())
FrontColor(#StandartFrontColor)
Box(0,0,1200,650,#Backcolor) ;Hintergrund zeichnen
If MouseOverINPUTButton = #True ;MouseOver DATAINPUT Button
Box(1090,75,90,30,#MouseOverButtonColor)
EndIf
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
Box(10,40,590,150) ;Obere EEG-Umrandung
Box(10,240,590,150) ;Untere EEG-Umrandung
Box(610,40,130,350) ;SYNC-Umrandung
Box(750,520,440,120) ;DATA-Output-Umrandung
Box(750,40,440,100) ;DATA-Input-Umrandung
Box(860,60,220,60) ;DATA-Input innere Umrandung
Box(1090,75,90,30) ;DATA-Input Button
Circle(820,70,7) ;Die äußeren Kreise der Checkboxen
Circle(820,110,7)
Box(9,399,632,242) ;Äußere Hülle der Liste
Box(10,400,630,240) ;Innere Hülle der Liste
Box(10,424,630,2) ;Die Unterteilungen der Ersten Zeile Zeichnen
Box(40,400,2,240) ;# Spalte
Box(180,400,2,240) ;START Spalte
Box(320,400,2,240) ;END Spalte
Box(440,400,2,240) ;LENGTH Spalte
Box(690,55,40,320) ;SYNC-Ladebalken zeichnen
Box(910,150,260,120) ;Sinuserklärungsbox zeichnen
For n = 1 To 8
Box(10,424 + n*24,630,1)
Next
DrawingMode(#PB_2DDrawing_Transparent)
If From = #True ;Zeichnen der Inneren Kreise der Checkboxen
Circle(820,70,4)
LineXY(827,70,832,70)
LineXY(832,70,852,90)
Else
Circle(820,110,4)
LineXY(827,110,832,110)
LineXY(832,110,852,90)
EndIf
LineXY(852,90,860,90)
Box(12,30,#EEG1UmrandungsTextBreite + 5,#EEGUmrandungsTextHoehe,#Backcolor) ;Obere EEG-Umrandung ausschneiden
Box(12,230,#EEG2UmrandungsTextBreite + 6,#EEGUmrandungsTextHoehe,#Backcolor) ;Untere EEG-Umrandung ausschneiden
Box(612,30,#SYNCUmrandungsTextBreite + 6,#EEGUmrandungsTextHoehe,#Backcolor) ;SYNC-Umrandung ausschneiden
Box(752,510,#DATAOUTPUTUmrandungsTextBreite + 6,#DATAUmrandungsTextHoehe,#Backcolor) ;DATAOUTPUT-Umrandung ausschneiden
Box(752,30,#DATAINPUTUmrandungsTextBreite + 6,#DATAUmrandungsTextHoehe,#Backcolor) ;DATAINPUT-Umrandung ausschneiden
DrawingFont(FontID(#TitelFont)) ;Titelfont
DrawText(20,-3,"SLEEP HELPER",#StandartFontColor) ;Titel zeichnen
DrawingFont(FontID(#StandartUmrandungsFont)) ;StandartUmrandungsfont setzen
DrawText(15,32,"EEG TARGET",#StandartFontColor) ;Die Umrandungsbeschriftungen zeichnen
DrawText(15,232,"EEG CALCULATED",#StandartFontColor)
DrawText(615,32,"SYNCRONIZATION",#StandartFontColor)
DrawText(1107,82,"SIMULATE",#StandartFontColor)
DrawText(807 - #DATAINPUTFROMLength,63,"FROM")
DrawText(807 - #DATAINPUTTOLength,103,"TO")
DrawText(750,160,"LIGHT (STATE I+II)")
DrawingFont(FontID(#DATAUmrandungsFont))
DrawText(20,402,"#")
DrawText(88,402,"START")
DrawText(237,402,"END")
DrawText(354,402,"LENGTH")
DrawText(456,402,"TACTICAL ASSESSMENT")
;DrawText(450,402,"TACTICAL ASSESSMENT")
; Debug "INPUT"
; Debug TextWidth("DATA INPUT")
; Debug "output"
; Debug TextWidth("DATA OUTPUT")
; Debug "height"
; Debug TextHeight("DATA INPUT")
DrawText(755,510,"DATA OUTPUT",#StandartFontColor)
DrawText(755,30,"DATA INPUT",#StandartFontColor)
;DrawText(
StopDrawing()
FlipBuffers()
If WindowEvent() = #PB_Event_CloseWindow
End
EndIf
ForEver
Danke schonmal für die Hilfe^^
Viele Grüße
Sauer-RAM