Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Grafik und Fonts

Eine Taschenuhr

Lizenz:Erster Autor:Letzte Bearbeitung:
WTFPLRedakteurVolta 24.03.2015

Viel Rechnerei um Pi, cos und sin !
Uhr

'Taschenuhr.bas by Volta
Const pi = 3.141593
Dim Shared As Integer breite, hoehe, radius, farbe=&hcfcf00
Dim As Single s, m, st, t
Dim ik As String

Sub Ziffernblatt (r As Integer, f As UInteger)
  Circle (breite\2, hoehe\2),r,f,,,1,F
End Sub

Sub Scala (x As Single, r As Integer, f As UInteger)
  Line (breite\2, hoehe\2)-((breite\2)-(Sin(x)*r), (hoehe\2)-(Cos(x)*r)),f
End Sub

Sub Uhrzeiger (x As Single, r As Integer, z As Single)
  PSet (breite\2, hoehe\2),farbe
  Line -((breite\2)-(Sin(x-z)*r*.8), (hoehe\2)-(Cos(x-z)*r*.8)),farbe
  Line -((breite\2)-(Sin(x)*r), (hoehe\2)-(Cos(x)*r)),farbe
  Line -((breite\2)-(Sin(x+z)*r*.8), (hoehe\2)-(Cos(x+z)*r*.8)),farbe
  Line -(breite\2, hoehe\2),farbe
  Paint ((breite\2)-(Sin(x)*r*.8), (hoehe\2)-(Cos(x)*r*.8)),farbe+&h303000,farbe
  Line (breite\2, hoehe\2)-((breite\2)-(Sin(x)*r), (hoehe\2)-(Cos(x)*r)),farbe
End Sub

Screenres 300,300,32,2,4 'breite, hoehe, Farbtiefe, Zahl_der_Seiten, Flags
ScreenInfo breite, hoehe
Width breite\8,hoehe\16 'Font_16 einstellen
radius = hoehe\2-10
Color ,&hdddddd
Cls
ScreenSet 0, 1 'aktive_Seite, sichtbare_Seite

'zeichne Ziffernblatt auf Seite 0
Ziffernblatt radius, RGB(100,100,0)
For i As Integer = 1 To 60
  Scala  pi/-30*i, radius, -1
Next
Ziffernblatt radius-5, RGB(130,130,0)
For i As Integer = 1 To 12
  Scala  pi/-6*i, radius, -1
Next
Ziffernblatt radius-10, RGB(150,150,0)
For i As Integer = 1 To 12 'Zahlen
  Draw String   ((breite\2-7)-(Sin(pi/-6*i)*(radius-20)), _
  (hoehe\2-7)-(Cos(pi/-6*i)*(radius-20))), Right("  " & i, 2), 0
  Draw String   ((breite\2-8)-(Sin(pi/-6*i)*(radius-20)), _
  (hoehe\2-8)-(Cos(pi/-6*i)*(radius-20))), Right("  " & i, 2), -1
Next
ScreenSet 1, 1 'setze aktive Seite 1

Do
  If t <= Timer Then
    ScreenLock      'Anzeige nicht ändern
    ScreenCopy 0, 1 'kopiere Seite 0 (Ziffernblatt) zu Seite 1

    'Sekundenzeiger zeichnen
    Uhrzeiger pi/-30*Val(Right(Time,2)), radius*.9, .03
    'Minutenzeiger zeichnen
    m = Val(Mid(Time,4,2))+(Val(Right(Time,2))/60)
    m *= (pi/-30)
    Uhrzeiger m, radius*0.75, .05
    'Stundenzeiger zeichnen
    st = Val(Left(Time,2)) + (Val(Mid(Time,4,2))/60)
    If st > 12 Then st -= 12
    st *= (pi/-6)
    Uhrzeiger st, radius*0.6, .08
    'Uhrzeit
    Draw String (breite\2-31, hoehe\2+31),Time,0
    Draw String (breite\2-32, hoehe\2+30),Time,-1

    ScreenUnLock   'Anzeigen
    ScreenSync
    t = Timer+1
  EndIf
  Sleep 20,1
  ik=InKey
  If MultiKey (&h01) Or ik = Chr(255,107) Then Exit Do

Loop

Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 24.03.2015 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 24.03.2015 von RedakteurVolta gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen