Instelbare Timer + Countdown en MP3 alarm.

Status
Niet open voor verdere reacties.

sabthal

Gebruiker
Lid geworden
13 sep 2011
Berichten
81
Goedemiddag,

Ik ben bezig met het maken van een instelbare timer waarbij je bijvoorbeeld aangeeft: Ik wil gewekt worden om:
ComboBox1.Text (Uur) ComboBox1.Text (Minuten)

Dus bij de combobox1 kies het bijvoorbeeld 2 en combobox2 kies je 45: 2:45
Als de huidige tijd 12:37 is dan zou de applicatie je de volgende dag wakker moeten maken om 2:45.

Ik heb een Label waar de wektijd instaat: 2:45
En ik heb een label die de tijd tussen nu (12:37) en 2:45 moet aftellen, dit lukt mij echt op geen enkele manier :(

Tevens heb ik op dit moment als de timer klaar is dit gebruikt:
Code:
If Uur = Now.Hour And Minuut = Now.Minute And Seconde = Now.Second Then
            Timer1.Enabled = False
            Process.Start("D:\Muziek\Catz 538 Dance Smash 2012 Vol.1 (MP3) - [00+35] - 'Catz 538 Dance Smash 2012 Vol.1 (MP3).nzb' yEnc\538 Dance Smash 2012 Vol.1 (MP3)\01 - Avicii - Levels.mp3")
        End If

Dat bovenstaande werkt (hij opent het nummer is Winamp en speelt het af), maar de gebruiker kan dan het nummer niet meer veranderen :D
Ik zat te prutsen met dat je kunt bladeren naar het bestand wat je wilt gebruiken maar dat is me nog niet helemaal gelukt.
Als iemand daar een tip of misschien iets veel beters voor weet dan is dat van harte welkom.

Bedankt voor het lezen en ik hoop dat iemand me hierbij kan helpen :)

P.S.:
Ik gebruik de code die MartinJM voor me heeft uitgezocht om de timer af te laten tellen, hierbij is Extra_Uur de ComboBox1.Text en Extra_Minuten de ComboBox2.Text:
Code:
Public Sub Aftellen_Progressbar_Eind(Optional ByVal Extra_Uur As Integer = 0, Optional ByVal Extra_Minuten As Integer = 0, Optional ByVal Extra_Seconden As Integer = 0)
        Eind_Uur = Extra_Uur - Now.Hour
        Eind_Minuut = Extra_Minuten - Now.Minute
        Eind_Seconde = Extra_Seconden - Now.Second
        Dim BerekenTotaalUur As Integer = Eind_Uur - Now.Hour
        Dim BerekenTotaalMinuut As Integer = Eind_Minuut - Now.Minute
        Dim BerekenTotaalSeconde As Integer = Eind_Seconde - Now.Second

BerekenTotaalTerug:

        If BerekenTotaalUur < 0 Then
            BerekenTotaalUur += 24
            GoTo BerekenTotaalTerug
        ElseIf BerekenTotaalMinuut < 0 Then
            BerekenTotaalUur -= 1
            BerekenTotaalMinuut += 60
            GoTo BerekenTotaalTerug
        ElseIf BerekenTotaalSeconde < 0 Then
            BerekenTotaalMinuut -= 1
            BerekenTotaalSeconde += 60
            GoTo BerekenTotaalTerug
        End If

        Totaal_Seconden = BerekenTotaalUur * 3600 + BerekenTotaalMinuut * 60 + BerekenTotaalSeconde


Terug:

        If Eind_Uur > 24 Then
            Eind_Uur -= 24
            GoTo Terug
        ElseIf Eind_Minuut > 60 Then
            Eind_Uur += 1
            Eind_Minuut -= 60
            GoTo Terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo Terug
        End If

        Timer1.Interval = 10
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim AftellenUur As Integer = Eind_Uur - Now.Hour
        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

        If AftellenUur < 0 Then
            AftellenUur += 24
            GoTo AftellenTerug
        ElseIf AftellenMinuut < 0 Then
            AftellenUur -= 1
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        End If
End Sub
 
Je kan geen topics verplaatsen, dat kunnen enkel moderators. Ik heb je nieuwe topic gesloten en deze verplaatst. Volgende keer gewoon aan de moderator verzoeken je topic te verplaatsen, indien deze verkeerd staat.
 
Voor het aftellen in een label zou je (volgens mij) dit moeten gebruiken onder je timer:
[CPP] Dim AftellenUur As Integer = Eind_Uur - Now.Hour
Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second

AftellenTerug:

If AftellenUur < 0 Then
AftellenUur += 24
GoTo AftellenTerug
ElseIf AftellenMinuut < 0 Then
AftellenUur -= 1
AftellenMinuut += 60
GoTo AftellenTerug
ElseIf AftellenSeconde < 0 Then
AftellenMinuut -= 1
AftellenSeconde += 60
GoTo AftellenTerug
End If

Label1.Text = AftellenUur & ":" & AftellenMinuut & ":" & AftellenSeconde
[/CPP]
(Ik weet het niet meer zeker, het is al een tijdje geleden dat ik deze code gemaakt heb...)


Voor de mogelijkheid om het nummer te veranderen zal je de plaats van het nummer in een aparte variable moeten zetten. Die kan je dan vervolgens door de gebruiker laten invullen (in het begin misschien met een textbox). Als dat is gelukt kan je doorgaan met het toevoegen van een openfiledialog.

Succes!:thumb:

MartinJM
 
Hoi MArtin,

Dat is denk ik de code ja, alleen werkt het bovenste gedeelte niet mee denk ik:
Code:
Public Sub Aftellen_Progressbar_Eind(Optional ByVal Extra_Uur As Integer = 0, Optional ByVal Extra_Minuten As Integer = 0, Optional ByVal Extra_Seconden As Integer = 0)
        Eind_Uur = Extra_Uur - Now.Hour
        Eind_Minuut = Extra_Minuten - Now.Minute
        Eind_Seconde = Extra_Seconden - Now.Second
        Dim BerekenTotaalUur As Integer = Eind_Uur - Now.Hour
        Dim BerekenTotaalMinuut As Integer = Eind_Minuut - Now.Minute
        Dim BerekenTotaalSeconde As Integer = Eind_Seconde - Now.Second

BerekenTotaalTerug:

        If BerekenTotaalUur < 0 Then
            BerekenTotaalUur += 24
            GoTo BerekenTotaalTerug
        ElseIf BerekenTotaalMinuut < 0 Then
            BerekenTotaalUur -= 1
            BerekenTotaalMinuut += 60
            GoTo BerekenTotaalTerug
        ElseIf BerekenTotaalSeconde < 0 Then
            BerekenTotaalMinuut -= 1
            BerekenTotaalSeconde += 60
            GoTo BerekenTotaalTerug
        End If

        Totaal_Seconden = BerekenTotaalUur * 3600 + BerekenTotaalMinuut * 60 + BerekenTotaalSeconde


Terug:

        If Eind_Uur > 24 Then
            Eind_Uur -= 24
            GoTo Terug
        ElseIf Eind_Minuut > 60 Then
            Eind_Uur += 1
            Eind_Minuut -= 60
            GoTo Terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo Terug
        End If

        Timer1.Interval = 10

    End Sub

Hij moet de berekening doen van als dat de wektijd 2:45 is, en de huidige tijd 22:45 dat hij dan 3 uur aftelt, die berekening werkt niet.

Ik heb de variabele geprobeerd:
Code:
wakeupsong = TextBox1.Text

If Eind_Uur = Now.Hour And Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer1.Enabled = False
            Process.Start(wakeupsong)

die werkt :) thanks!

Edit: FileOpenDialog werkt ook al, gaat alleen nog om het aftellen :)
Ding werkt dankzij: http://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx
 
Laatst bewerkt:
Helaas werkt nog steeds niet de teller, iemand enig idee?
zie hierboven.
 
Weet je zeker dat je de code wel goed aanroept? Vanuit hier kunnen wij dat nu niet zien...

Ik zal nog eens goed kijken naar de rest van de code die je hier hebt gepost. Als je de hele code zou kunnen posten dan kunnen wij misschien ook zien waar de fout zit....

MartinJM
 
Bij deze Martin:

Form1
Code:
Public Class Form1
    Public Eind_Uur As Integer
    Public Eind_Minuut As Integer
    Public Eind_Seconde As Integer
    Public Totaal_Seconden As Integer
    Public ProgressbarWidth As Integer = 750

    Public Sub Aftellen_Progressbar_Eind(Optional ByVal Extra_Uur As Integer = 0, Optional ByVal Extra_Minuten As Integer = 0, Optional ByVal Extra_Seconden As Integer = 0)
        Eind_Uur = Extra_Uur - Now.Hour
        Eind_Minuut = Extra_Minuten - Now.Minute
        Eind_Seconde = Extra_Seconden - Now.Second
        Dim BerekenTotaalUur As Integer = Eind_Uur - Now.Hour
        Dim BerekenTotaalMinuut As Integer = Eind_Minuut - Now.Minute
        Dim BerekenTotaalSeconde As Integer = Eind_Seconde - Now.Second

BerekenTotaalTerug:

        If BerekenTotaalUur < 0 Then
            BerekenTotaalUur += 24
            GoTo BerekenTotaalTerug
        ElseIf BerekenTotaalMinuut < 0 Then
            BerekenTotaalUur -= 1
            BerekenTotaalMinuut += 60
            GoTo BerekenTotaalTerug
        ElseIf BerekenTotaalSeconde < 0 Then
            BerekenTotaalMinuut -= 1
            BerekenTotaalSeconde += 60
            GoTo BerekenTotaalTerug
        End If

        Totaal_Seconden = BerekenTotaalUur * 3600 + BerekenTotaalMinuut * 60 + BerekenTotaalSeconde


Terug:

        If Eind_Uur > 24 Then
            Eind_Uur -= 24
            GoTo Terug
        ElseIf Eind_Minuut > 60 Then
            Eind_Uur += 1
            Eind_Minuut -= 60
            GoTo Terug
        ElseIf Eind_Seconde > 60 Then
            Eind_Minuut += 1
            Eind_Seconde -= 60
            GoTo Terug
        End If

        Timer1.Interval = 10

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim AftellenUur As Integer = Eind_Uur - Now.Hour
        Dim AftellenMinuut As Integer = Eind_Minuut - Now.Minute
        Dim AftellenSeconde As Integer = Eind_Seconde - Now.Second
        Dim wakeupsong As String

AftellenTerug:

        If AftellenUur < 0 Then
            AftellenUur += 24
            GoTo AftellenTerug
        ElseIf AftellenMinuut < 0 Then
            AftellenUur -= 1
            AftellenMinuut += 60
            GoTo AftellenTerug
        ElseIf AftellenSeconde < 0 Then
            AftellenMinuut -= 1
            AftellenSeconde += 60
            GoTo AftellenTerug
        End If

        Try
            PictureBox4.Width = ProgressbarWidth - ((AftellenUur * 3600 + AftellenMinuut * 60 + AftellenSeconde) / Totaal_Seconden) * ProgressbarWidth
        Catch
        End Try

        wakeupsong = Label7.Text

        Label2.Text = Format(AftellenUur, "00") & ":" & Format(AftellenMinuut, "00") & ":" & Format(AftellenSeconde, "00")

        Me.Text = ("SabAlarm - ") & Label2.Text
        If Eind_Uur = Now.Hour And Eind_Minuut = Now.Minute And Eind_Seconde = Now.Second Then
            Timer1.Enabled = False
            Process.Start(wakeupsong)
            Me.Text = ("SabAlarm")
        End If

    End Sub

    Public Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        Label3.Text = Format(Now, "HH:mm:ss")
    End Sub

    Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Form2.Show()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If Timer1.Enabled = True Then
            Form3.Show()
            Exit Sub
        ElseIf Timer1.Enabled = False Then
            Label2.Text = ("00:00:00")
            Label5.Text = ("00:00")
            PictureBox4.Width = 0
        End If
    End Sub

End Class

Form2
Code:
Imports System.IO

Public Class Form2

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        'Duits
        My.Forms.Form1.Label1.Text = ("")
        My.Forms.Form1.Label4.Text = ("")
        My.Forms.Form4.Label1.Text = ("")
        Me.Text = ("")
        My.Forms.Form3.Text = ("")
        My.Forms.Form1.Button1.Text = ("")
        My.Forms.Form1.Button2.Text = ("")
        My.Forms.Form1.Button3.Text = ("")
        ToolTip1.ToolTipTitle = (":")
        Button1.Text = ("")
        Button2.Text = ("")
        Label1.Text = ("")
        Label2.Text = ("")
        Label3.Text = ("")
    End Sub

    Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
        'Engels
        My.Forms.Form1.Label1.Text = ("Waking you up in:")
        My.Forms.Form1.Label4.Text = ("Current time:")
        My.Forms.Form4.Label1.Text = ("Restart running timer?")
        Me.Text = ("SabAlarm - Settings")
        My.Forms.Form3.Text = ("SabAlarm - Wake Up!")
        My.Forms.Form1.Button1.Text = ("Quit")
        My.Forms.Form1.Button2.Text = ("Settings")
        My.Forms.Form1.Button3.Text = ("Stop")
        ToolTip1.ToolTipTitle = ("Language:")
        Button1.Text = ("Set")
        Button2.Text = ("Instellen")
        Label1.Text = ("Wake me up at:")
        Label2.Text = ("Hour:")
        Label3.Text = ("Minutes:")
    End Sub

    Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click
        'Nederlands
        My.Forms.Form1.Label1.Text = ("Je word wakker gemaakt over:")
        My.Forms.Form1.Label4.Text = ("Huidige tijd:")
        My.Forms.Form4.Label1.Text = ("Lopende timer herstarten?")
        Me.Text = ("SabAlarm - Instellingen")
        My.Forms.Form3.Text = ("SabAlarm - Wakker Worden!")
        My.Forms.Form1.Button1.Text = ("Afsluiten")
        My.Forms.Form1.Button2.Text = ("Instellingen")
        My.Forms.Form1.Button3.Text = ("Stop")
        ToolTip1.ToolTipTitle = ("Taal:")
        Button1.Text = ("Instellen")
        Button2.Text = ("Sluiten")
        Label1.Text = ("Maak me wakker om:")
        Label2.Text = ("Uur:")
        Label3.Text = ("Minuten:")
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If My.Forms.Form1.Timer1.Enabled = True Then
            Form4.Show()
        ElseIf My.Forms.Form1.Timer1.Enabled = False Then
            My.Forms.Form1.PictureBox4.Width = 0
            Call My.Forms.Form1.Aftellen_Progressbar_Eind(ComboBox1.Text, ComboBox2.Text)
            My.Forms.Form1.Timer1.Enabled = True
            My.Forms.Form1.Label7.Text = TextBox1.Text
            Me.Close()
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.Close()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        My.Forms.Form1.Label5.Text = Format(ComboBox1.Text) & ":" & Format(ComboBox2.Text)
    End Sub

    Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
        My.Forms.Form1.Label5.Text = Format(ComboBox1.Text) & ":" & Format(ComboBox2.Text)
    End Sub

    Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    End Sub

    Private Sub TextBox1_Click() Handles TextBox1.Click
        Dim myStream As Stream = Nothing
        Dim openFileDialog1 As New OpenFileDialog()

        openFileDialog1.InitialDirectory = "d:\muziek"
        openFileDialog1.Filter = "All files (*.*)|*.*"
        openFileDialog1.FilterIndex = 2
        openFileDialog1.RestoreDirectory = True

        If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            Try
                myStream = openFileDialog1.OpenFile()
                If (myStream IsNot Nothing) Then
                    TextBox1.Text = openFileDialog1.FileName
                End If
            Catch Ex As Exception
                MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message)
            Finally
                ' Check this again, since we need to make sure we didn't throw an exception on open.
                If (myStream IsNot Nothing) Then
                    myStream.Close()
                End If
            End Try
        End If
    End Sub

End Class

Hier ook 2 screenshots om een beeld te vormen:
Form1
alarmclock.png


Form2
alarmclocksettings.png
 
Maak van deze 3 regels:
[CPP]Eind_Uur = Extra_Uur - Now.Hour
Eind_Minuut = Extra_Minuten - Now.Minute
Eind_Seconde = Extra_Seconden - Now.Second
[/CPP]
(in de 'Aftellen_Progressbar_Eind' sub)

eens deze regels:
[CPP]Eind_Uur = Extra_Uur
Eind_Minuut = Extra_Minuten
Eind_Seconde = Extra_Seconden[/CPP]

Ik denk dat dat wel werkt...

MartinJM
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan