Uhrzeit Anzeige
Übersicht

![]() |
XenonBetreff: Uhrzeit Anzeige |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe mal eine nettes BB-Uhrenprogramm geschrieben. Enthalten sind insgesammt 4 Uhren mit je einer Digitalen und einer analogen Uhr. Die 4 Uhren zeigen: 1. Die Zeit seit der das Programm läuft 2. Die aktuelle Uhrzeit 3. Die Zeit seit dem Systemstart von Windows 4. Eine Stoppuhr Die Stoppuhr lässt sich über die Tasten S (Start/Stopp), P (Pause bzw. besser: Zwischenzeit) und R (Reset) steuern. Viel Spaß, Xenon Code: [AUSKLAPPEN] ;###################################################################################################;
;# #; ;# BlitzUhr.bb #; ;# =========== #; ;# #; ;# Autor: Jörg (Xenon) Müller #; ;# Datum: 17.08.2004 #; ;# Zweck: Benutzen der Zeit- und Sin-/Cos-Funktionen für eine Uhranzeige, Analog und Digital #; ;# #; ;###################################################################################################; ; Konstanten für die Steuerung der Stoppuhr Const KEY_START = 31 Const KEY_PAUSE = 25 Const KEY_RESET = 19 ; Konstanten für die Stoppuhr Statis Const SS_STOP = 0 Const SS_RUN = 1 Const SS_PAUSE = 2 ; Größe eines Digitalen Pixels Const cDigiSize = 2 ; Größe der Zeiger und des Rahmenradius Const cMainRadius = 56*cDigiSize/2 Const cMSRadius = 50.0*cMainRadius/60.0 Const cSecRadius = 45.0*cMainRadius/60.0 Const cMinRadius = 40.0*cMainRadius/60.0 Const cHrRadius = 30.0*cMainRadius/60.0 ; Zeitvariablen Local starttime = MilliSecs() Local ms, s, m, h Local temp$ = CurrentTime$() Local timetime Repeat timetime = MilliSecs() Until temp$ <> CurrentTime$() Local stoptime, curstoptime, stopstate Local time Local lasttime = MilliSecs() ; Initialisierung AppTitle "BlitzUhr" Graphics cMainRadius*4+15, cMainRadius*4+30+cDigiSize*14, 0, 2 SetBuffer BackBuffer() SeedRnd MilliSecs() ; Hauptschleife Repeat ; Framezeit berechnen time = MilliSecs()-lasttime lasttime = MilliSecs() ; Stoppuhr updaten Select stopstate Case SS_RUN curstoptime = curstoptime + time stoptime = curstoptime Case SS_PAUSE curstoptime = curstoptime + time End Select ; Stoppuhr steuern ; Start/Stopp If KeyHit(KEY_START) Then If (stopstate = SS_STOP) Or (stopstate = SS_PAUSE) Then stopstate = SS_RUN Else stopstate = SS_STOP End If End If ; Reset If KeyHit(KEY_RESET) Then curstoptime = 0 stoptime = 0 End If ; Pause If KeyHit(KEY_PAUSE) Then stopstate = SS_PAUSE End If ; Laufzeit des Programmes ausrechnen ms = MilliSecs()-starttime s = ms / 1000 m = s / 60 h = m / 60 ; Laufzeit anzeigen DrawAnalogHour(5, 5, s, m, h, ms, True) DrawDigitalHour(5, cMainRadius*2+10, s, m, h, ms, True) ; Aktuelle Uhrzeit ausrechnen ms = MilliSecs()-timetime s = Int(Right$(CurrentTime$(), 2)) m = Int(Mid$(CurrentTime$(), 4, 2)) h = Int(Left$(CurrentTime$(), 2)) ; Aktuelle Uhrzeit anzeigen DrawAnalogHour(cMainRadius*2+10, 5, s, m, h, ms, True) DrawDigitalHour(cMainRadius*2+10, cMainRadius*2+10, s, m, h, ms, True) ; Zeit seit Windowsstart ausrechnen ms = MilliSecs() s = ms / 1000 m = s / 60 h = m / 60 ; Windowsstartzeit anzeigen DrawAnalogHour(5, cMainRadius*2+15+cDigiSize*7, s, m, h, ms, True) DrawDigitalHour(5, cMainRadius*4+25+cDigiSize*7, s, m, h, ms, True) ; Stoppuhrzeit ausrechnen ms = stoptime s = ms / 1000 m = s / 60 h = m / 60 ; Stoppuhrzeit anzeigen DrawAnalogHour(cMainRadius*2+10, cMainRadius*2+15+cDigiSize*7, s, m, h, ms, True) DrawDigitalHour(cMainRadius*2+10, cMainRadius*4+25+cDigiSize*7, s, m, h, ms, True) ; Bildschirmaktinen Flip Cls Until KeyDown(1) End ; Zeichnet eine analoge Uhr Function DrawAnalogHour(x, y, s, m, h, ms = 0, dms = False) ; Winkel berechnen Local fs# = 360.0 / 60.0 * (Abs(s) Mod 60) - 90 Local fm# = 360.0 / 60.0 * (Abs(m) Mod 60) - 90 Local fh# = 360.0 / 12.0 * (Abs(h) Mod 12) - 90 Local fms# = 360.0 / 1000.0 * (Abs(ms) Mod 1000) - 90 ; Rahmen Oval x, y, cMainRadius Shl 1, cMainRadius Shl 1, 0 ; Millisekundenzeiger If dms Then Line x + cMainRadius, y + cMainRadius, x + cMainRadius + Cos(fms)*cMSRadius, y + cMainRadius + Sin(fms)*cMSRadius End If ; Sekundenzeiger Line x + cMainRadius, y + cMainRadius, x + cMainRadius + Cos(fs)*cSecRadius, y + cMainRadius + Sin(fs)*cSecRadius ; Minutenzeiger Line x + cMainRadius, y + cMainRadius, x + cMainRadius + Cos(fm)*cMinRadius, y + cMainRadius + Sin(fm)*cMinRadius ; Stundenzeiger Line x + cMainRadius, y + cMainRadius, x + cMainRadius + Cos(fh)*cHrRadius, y + cMainRadius + Sin(fh)*cHrRadius End Function ; Zeichnet eine digitale Uhr Function DrawDigitalHour(x, y, s, m, h, ms = 0, dms = False) ; Parameter korrigieren s = Abs(s) Mod 60 m = Abs(m) Mod 60 h = Abs(h) Mod 24 ms = Abs(ms) Mod 1000 ; Stunden zeichnen DrawDigiNumber(x, y, h / 10) x = x + cDigiSize*3 + (cDigiSize Shl 1) DrawDigiNumber(x, y, h) x = x + cDigiSize*3 + (cDigiSize Shl 1) ; Doppelpunkt zwischen Stunden und Minuten Rect x + cDigiSize, y + (cDigiSize Shl 1), cDigiSize, cDigiSize Rect x + cDigiSize, y + (cDigiSize Shl 1) * 2, cDigiSize, cDigiSize x = x + cDigiSize*4 ; Minuten zeichnen DrawDigiNumber(x, y, m / 10) x = x + cDigiSize*3 + (cDigiSize Shl 1) DrawDigiNumber(x, y, m) x = x + cDigiSize*3 + (cDigiSize Shl 1) ; Doppelpunkt zwischen Minuten und Sekunden zeichnen Rect x + cDigiSize, y + (cDigiSize Shl 1), cDigiSize, cDigiSize Rect x + cDigiSize, y + (cDigiSize Shl 1) * 2, cDigiSize, cDigiSize x = x + cDigiSize*4 ; Sekunden zeichnen DrawDigiNumber(x, y, s / 10) x = x + cDigiSize*3 + (cDigiSize Shl 1) DrawDigiNumber(x, y, s) x = x + cDigiSize*3 + (cDigiSize Shl 1) If dms Then ; Doppelpunkt zwischen Sekunden und Millisekunden zeichnen Rect x + cDigiSize, y + (cDigiSize Shl 1), cDigiSize, cDigiSize Rect x + cDigiSize, y + (cDigiSize Shl 1) * 2, cDigiSize, cDigiSize x = x + cDigiSize*4 ; Millisekunden zeichnen DrawDigiNumber(x, y, ms / 100) x = x + cDigiSize*3 + (cDigiSize Shl 1) DrawDigiNumber(x, y, ms / 10) x = x + cDigiSize*3 + (cDigiSize Shl 1) DrawDigiNumber(x, y, ms) x = x + cDigiSize*3 + (cDigiSize Shl 1) End If End Function ; Zeichnet eine digitale Nummer Function DrawDigiNumber(x, y, number) Local digi[6] ; Parameter korrigieren number = Abs(number) Mod 10 ; Richtige Digitaldaten lesen Select number Case 0 Restore digi0 Case 1 Restore digi1 Case 2 Restore digi2 Case 3 Restore digi3 Case 4 Restore digi4 Case 5 Restore digi5 Case 6 Restore digi6 Case 7 Restore digi7 Case 8 Restore digi8 Case 9 Restore digi9 End Select ; Digitaldaten lesen For i = 0 To 6 Read digi[i] Next ; Je nach Digitaldaten zeichnen If digi[0] Then Rect x + cDigiSize, y, (cDigiSize Shl 1), cDigiSize If digi[1] Then Rect x, y + cDigiSize, cDigiSize, (cDigiSize Shl 1) If digi[2] Then Rect x + (cDigiSize Shl 1) + cDigiSize, y + cDigiSize, cDigiSize, (cDigiSize Shl 1) If digi[3] Then Rect x + cDigiSize, y + (cDigiSize Shl 1) + cDigiSize, (cDigiSize Shl 1), cDigiSize If digi[4] Then Rect x, y + (cDigiSize Shl 1) * 2, cDigiSize, (cDigiSize Shl 1) If digi[5] Then Rect x + (cDigiSize Shl 1) + cDigiSize, y + (cDigiSize Shl 1) * 2, cDigiSize, (cDigiSize Shl 1) If digi[6] Then Rect x + cDigiSize, y + (cDigiSize Shl 1) * 3, (cDigiSize Shl 1), cDigiSize End Function ; Pixeldaten der Digitalen zahlen .digi0 Data 1, 1, 1, 0, 1, 1, 1 .digi1 Data 0, 0, 1, 0, 0, 1, 0 .digi2 Data 1, 0, 1, 1, 1, 0, 1 .digi3 Data 1, 0, 1, 1, 0, 1, 1 .digi4 Data 0, 1, 1, 1, 0, 1, 0 .digi5 Data 1, 1, 0, 1, 0, 1, 1 .digi6 Data 1, 1, 0, 1, 1, 1, 1 .digi7 Data 1, 0, 1, 0, 0, 1, 0 .digi8 Data 1, 1, 1, 1, 1, 1, 1 .digi9 Data 1, 1, 1, 1, 0, 1, 1 |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
täuscht das oder geht die Stoppuhr nicht immer bei null los ???
Ich mein jetzt den "DeziSekundenZeiger" ![]() sonst: brauchbar für den ein oder anderen. MfG |
||
![]() |
Twit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun ja Is´ja gans nett aber glaub die windows uhr reicht auch schon aus ![]() |
||
Tote leben länger. |
![]() |
Xenon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code ist eigentlich rein zu Lehrzwecken gedacht, ich hab ihn nur aus langeweile geschrieben, währen ich die CS:S Beta runtergeladen habe.
Es geht um den Codestil, den jeder ungefähr so haben sollte. Vor allem um die Konstanten. Es sollten keine Zahlen, die geändert werden können frei im Code stehen, sonder nur solche Konstanten. Ändert zB mal die Konstante cDigiSize auf 1 und ihr werdet sehen wie sich ALLES anpasst, man braucht keinen Finger mehr zu rühren, damit sich die Größe der Uhren ändert. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group