Inhaltsverzeichnis

20.3.1 Timer-Projekte 1

Die vorgestellten Beispiele sind selbst entwickelten und erprobten Demonstrationsprogrammen aus unterschiedlichen Kapiteln entnommen. Es werden nur die Quelltext-Abschnitte angegeben, mit denen die Umsetzung des o.a. Konzepts sichtbar wird. Sie finden im Download-Bereich jeweils die Archive für das vollständige Projekt.

Digital

20.3.1.1 Beispiel 1 – Digitale Uhr

Abbildung 20.3.1.1.1: Digitale Uhr

Quelltext:

Private bTrennzeichen As Boolean
 
Public Sub Form_Open()  
  FMain.Center
  FMain.Text = "Tempus fugit ..."
  ...  
  LCDTimer.Delay = 1000 ' oder 500 (blinkender Doppelpunkt)
  LCDTimer.Start
  LCDTimer.Trigger  
End ' Form_Open() 
 
Public Sub LCDTimer_Timer()  
  bTrennzeichen = Not bTrennzeichen
  LCDLabel.Padding = 8
  LCDLabel.Text = Format(Now, "hh" & If(bTrennzeichen, ":", "") & "nn" & If(bTrennzeichen, ":", "") & "ss")  
End ' LCDTimer_Timer()

20.3.1.2 Beispiel 2 – Analoge Uhr

Analog

Abbildung 20.3.1.2.1: Analoge Uhr

Quelltext:

Public Sub Form_Open()
  FMain.Center
  FMain.Resizable = False
  ZeitLabel.Text = "Local-Time"
 
  Timer1.Delay = 1000 ' 1000 Millisekunden = 1 Sekunde
  Timer1.Start ' Alternative Syntax: Timer1.Enabled = TRUE
 
End ' Form_Open()
 
Public Sub Timer1_Timer() ' Taktgeber im Sekundentakt
  Dim sArcus, sArcus_S, sArcus_M, sArcus_H, x, y As Single
  Dim iRadius, iCount As Integer
 
  iRadius = 88
  sArcus_S = (90 - 6 * Second(Now)) * Pi / 180
  sArcus_M = (90 - 6 * Minute(Now)) * Pi / 180
  sArcus_H = (90 - 30 * Hour(Now) - 0.5 * Minute(Now)) * Pi / 180
 
  ZeitLabel.Text = Format$(Now, "hh:nn:ss")
 
  Draw.Begin(dwTest) ' Achtung: Seit GB 3.4 sollte Paint an Stelle von Draw verwendet werden
    Draw.Translate(dwTest.W / 2, dwTest.H / 2) ' Erst verschieben und dann skalieren!
    Draw.Scale(1, -1)
    Draw.Picture(Picture["Images/ziffernblatt.png"], -105, -105, 210, 210)
  ' Sekundenzeiger
    x = iRadius * Cos(sArcus_S)
    y = iRadius * Sin(sArcus_S)
    Draw.Foreground = Color.Red
    Draw.Line(0, 0, x, y)
  ' Minutenzeiger
    x = iRadius * Cos(sArcus_M)
    y = iRadius * Sin(sArcus_M)
    Draw.Foreground = Color.Green
    Draw.Line(0, 0, x, y)
  ' Stundenzeiger
    x = iRadius * Cos(sArcus_H)
    y = iRadius * Sin(sArcus_H)
    Draw.Foreground = Color.Blue
    Draw.LineWidth = 2
    Draw.Line(0, 0, x, y)    
  Draw.End 
 
End ' Timer1_Timer()   

20.3.1.3 Beispiel 3 – Uhr mit binärer Anzeige

Zugegeben – die Anzeige ist etwas ungewohnt; hat aber ihren Reiz dann, wenn Sie nach einiger Übung die Zeit von 14:09:24 Uhr sofort erfassen und ansagen können:

Binär

Abbildung 20.3.1.3.1: Binäre Anzeige der Uhrzeit

Quelltext

Public pBitPanel[24] As Panel
 
Public Sub Form_Open()
  Dim s As Integer
  Dim z As Integer
  Dim i As Integer
  ...
  For z = 1 To 4 ' 4 Zeilen
    For s = 1 To 6 ' 6 Spalten
      i = s + 6 * z - 7
      pBitPanel[i] = New Panel(Me) As "PDigit"
      pBitPanel[i].Background = &HE2E2E2
      pBitPanel[i].Move(16 + 62 * (s - 1), 16 + 62 * (z - 1), 52, 52)
    Next ' s
  Next ' z 
 
  Timer1.Delay = 1000
  Timer1.Start
  Timer1.Trigger
 
End ' Form_Open()
 
Public Sub Timer1_Timer()  
  DisplayTime(SetTimeMatrix()) ' Umfärben der 24 Panel
End ' Timer1_Timer()  
...

20.3.1.4 Beispiel 4 – Stopp-Uhr

Diese Stoppuhr wurde entwickelt, um End- und Zwischenzeiten für bestimmte Abläufe bequem ermitteln zu können. Neben den Start- und Stopp-Tasten gibt es auch eine Pause-Taste (die Anzeige wird nicht aktualisiert) und eine Weiter-Taste, welche die Anzeige wieder zuschaltet.

Stopp-Uhr

Abbildung 20.3.1.4.1: Stopp-Uhr

Quelltext:

' Gambas class file
 
Private bTimeOut As Boolean = False
Private bPause As Boolean = False
Private iSekunden As Integer = 0
Private iMinuten As Integer = 0
 
Public Sub Form_Open()
  FMain.Center
  FMain.Resizable = False
  TimerDP.Delay = 500
  TimerStoppUhr.Delay = 1000 ' Test: TimerStoppUhr.Delay = 1 oder 10
  FMain.Text = "Stop-Uhr: 0 " & String.Chr(&2266) & " Zeit " & String.Chr(&2266) & " 1 Stunde"
  SetModus(True, False, False, False)
  lcdAnzeigeSekunden.Value = 0
  lcdAnzeigeMinuten.Value = 0
End ' Form_Open()
 
Public Sub btnStart_Click()
  TimerStoppUhr.Start
  TimerDP.Start
  iSekunden = 0
  iMinuten = 0
  lcdAnzeigeSekunden.Value = 0
  lcdAnzeigeMinuten.Value = 0
  SetModus(False, True, False, True)
  FMain.Text = "Stop-Uhr: 0 " & String.Chr(&2266) & " Zeit " & String.Chr(&2266) & " 1 Stunde"
End ' btnStart_Click()
 
Public Sub btnPause_Click()  
  bPause = True
  SetModus(False, False, True, True)
End ' btnPause_Click()  
 
Public Sub btnWeiter_Click()
  bPause = False
  SetModus(False, True, False, True)
  lcdAnzeigeSekunden.Value = iSekunden
  lcdAnzeigeMinuten.Value = iMinuten
End ' btnWeiter_Click()
 
Public Sub btnStop_Click()
  TimerStoppUhr.Stop
  TimerDP.Stop
  SetModus(True, False, False, False)
  labelDoppelpunkt.Visible = True
  bPause = False
  lcdAnzeigeSekunden.Value = iSekunden
  lcdAnzeigeMinuten.Value = iMinuten
End ' btnStop_Click()
 
Public Sub TimerDP_Timer()
  labelDoppelpunkt.Visible = Not labelDoppelpunkt.Visible
End ' TimerDP_Timer()
 
Public Sub TimerStoppUhr_Timer()  
  If bPause = False Then
     Inc iSekunden
     lcdAnzeigeSekunden.Value = iSekunden
     If (iSekunden = 60) Then
        iSekunden = 0
        lcdAnzeigeSekunden.Value = 0
        Inc iMinuten
        lcdAnzeigeMinuten.Value = iMinuten
     Endif ' iSekunden = 60 ?
  Else
     Inc iSekunden
     If (iSekunden = 60) Then
        iSekunden = 0
        Inc iMinuten
     Endif ' iSekunden = 60 ?
  Endif '  bPause = False ?
 
  If (iSekunden = 59) And (iMinuten = 59) Then
     bTimeOut = True
  Endif ' Timeout ?
 
  If bTimeOut = True Then
     btnStop_Click()
     lcdAnzeigeMinuten.Value = 60
     lcdAnzeigeSekunden.Value = 0
     FMain.Text = "Eine Stunde ist erreicht ..."
     bTimeOut = False
  Endif ' bTimeOut = True ? 
 
End ' TimerStoppUhr_Timer()
 
Public Sub SetModus(iStart As Boolean, iPause As Boolean, iWeiter As Boolean, iStopp As Boolean)
     btnStart.Enabled = iStart
     btnPause.Enabled = iPause
     btnWeiter.Enabled = iWeiter
     btnStop.Enabled = iStopp
End ' SetModus(..)
 
Public Sub Form_Close()
  If TimerStoppUhr.Enabled Then TimerStoppUhr.Stop
  If TimerDP.Enabled Then TimerDP.Stop
End ' Form_Close()

Download