# Timer richtig berechnen



## Master_Kalimero (8. Oktober 2006)

Hallo,
ich bin ein absoluter VB Neuling und dachte mir, ich programmiere mir erstmal einen kleinen Wecker.
Das ganze Läuft so ab, dass man auf der Oberfläche die Weckzeit in Stunde (ZeitStunde) und Minute (ZeitMinute) einstellt. Beim Klick auf einschalten soll dann ein Timer gestartet werden und genau hier liegt das Problem. 


```
Private Sub cmdWeckEin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWeckEin.Click
        Dim i As Integer
        i = 0
        i = ZeitStunde.Value - Format(Now, "hh")
        If (i < 0) Then
            i = i + 24
        End If
        i = i * 60
        If ((ZeitMinute.Value - Format(Now, "mm")) < 0) Then
            i = i + ZeitMinute.Value - Format(Now, "mm") + 60
        Else
            i = i + ZeitMinute.Value - Format(Now, "mm")
        End If
        i = i * 60
        txtDatei.Text = i & "Sekunden"
        i = i * 1000
        Zeitgeber.Interval = i
        Zeitgeber.Start()
    End Sub
```
Zum testen lasse ich ihn die Zeit erstmal in einer Textbox ausgeben und er gibt mir immer Werte jenseits der 20000 Sekunden aus.
Zeitgeber ist ein auf der Oberfläche definierter Timer.
Als IDE benutze ich Microsoft Visual Basic 2005 Express.


Ich bin für jede Hilfe dankbar.


----------



## _prodigy (8. Oktober 2006)

Bestimmt nicht die eleganteste Methode, aber es funktioniert.

Bilder:
http://img118.imageshack.us/img118/6833/10082006212441pd9.jpg
http://img118.imageshack.us/img118/5924/10082006212455jt2.jpg


```
Public Class Wecker
    Public curStd As String
    Public curMin As String
    Public curSek As String
    Public weckStd As String
    Public weckMin As String
    Public weckSek As String
    
    Private Sub SecondsTick_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SecondsTick.Tick
        curStd = Format(Now, "HH")
        curMin = Format(Now, "mm")
        curSek = Format(Now, "ss")
        disp_curstd.Text = curStd
        disp_curmin.Text = curMin
        disp_cursek.Text = curSek
        If curStd = weckStd Then
            disp_stdTrue.Text = "1"
        Else
            disp_stdTrue.Text = "0"
        End If
        If curMin = weckMin Then
            disp_minTrue.Text = "1"
        Else
            disp_minTrue.Text = "0"
        End If
        If curSek = weckSek Then
            disp_sekTrue.Text = "1"
        Else
            disp_sekTrue.Text = "0"
        End If
        If curStd = weckStd And curMin = weckMin And curSek = weckSek Then
            Console.Beep()
            disp_Weckzeit.Visible = True
            HideAgain.Enabled = True
            Console.Beep()
        End If
    End Sub

    Private Sub btn_zeitSetzen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_zeitSetzen.Click
        weckStd = disp_std.Text
        weckMin = disp_min.Text
        weckSek = disp_sek.Text
        SecondsTick.Enabled = True
    End Sub

    Private Sub HideAgain_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HideAgain.Tick
        disp_Weckzeit.Visible = False
        HideAgain.Enabled = False
    End Sub

    Private Sub Wecker_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SecondsTick.Enabled = True
    End Sub
End Class
```

Habe 2 Timer verwendet, einer der jede Sekunde durchläuft (SecondsTick_Tick) und einer um den Text "Aufstehen!" wieder verschwinden zu lassen (HideAgain_Tick).

//edit: Ist mein erstes VB Programm, also seid nicht zu hart xD


----------



## Master_Kalimero (8. Oktober 2006)

also das ganze Problem hat sich geklärt, als ich mir die Zeitformatierung nochmal ganz genau angeschaut habe. "hh" bedeutet, dass er die Uhrzeit im 12 Stunden Format ausgibt und "HH" bedeutet 24 Stunden Format -> wieder dazugelernt ^^

Nu hab ich aber nen anderes Problem, oder eher zwei:
1. Was genau muss ich alles mitgeben wenn ich das Programm verteilen möchte? Die compilierte Wecker.exe und was brauch mein Tauschpartner noch? Ich habe die Vermutung, dass das .net-Framework installiert sein muss, stimmt das? (Der Wecker ging beim Kumpel nich zu starten, auf meinem Zweit-Entwicklungs-Rechner jedoch schon)

2. Ich will von dem Wecker nun eine ausgewählte Datei "starten" lassen. Dabei handelt es sich um eine mp3-Datei bzw um ne Playlist. Das soll alles über das dem Dateityp zugeordneten Programm gestartet werden. Wenn ich nun über Start->ausführen ganz einfach die Datei inkl. Pfad eintippe, startet es wie es soll. Wenn ich Shell(Datei) im Quelltext verwende allerdings nicht. In eine Batchdatei verpackt startet das ganze dann wiederrum doch xD Was mir also fehlt is nen ganz einfacher aber funkitionierender Dateiaufruf für z.B. C:\Test.mp3
Ich hoffe ihr versteht das, was ich getippt habe ^^



Gruss Kalimero
P.S.: Ihr seid echt supi


----------



## Shakie (9. Oktober 2006)

Erstens: Du bist im falschen Forum! Da du mit VB.Net arbeitest, wäre hier das richtige Forum, was übrigens auch hier im VB-Forum in einem extra Thread geschrieben steht.

Zweitens: Ja, das .Net-Framework wird benötigt. Und dazu auch noch in der richtigen Version (wollte nur drauf hinweisen, dass es 1.1 und 2.0 gibt)

Drittens: Shell kann nur Exe- und Batchdateien starten. Verwende bei beliebigen Dateien das hier:

```
System.Diagnostics.Process.Start ("Pfad zur Datei")
```


----------

