Cronometro regresivo

Iniciado por SγиtαxEяяoя, 17 Mayo 2013, 20:00 PM

0 Miembros y 3 Visitantes están viendo este tema.

SγиtαxEяяoя

#10
Humm, gracias el codigo que me das Electro.. tal parece no funciona... cuando selecciona la funcion de "sonido o proceso" esta automaticamente se inicia sin nisiquiera transcurrir el tiempo

mira te paso todo el codigo que llevo hasta ahora


Public Class Form1
   Dim Hora As Integer
   Dim Segundo As Integer
   Dim Minutos As Integer
   Dim Mx As Integer

   Private Sub CalcularyMostrar()
       TextBox1.Text = Hora.ToString.PadLeft(2, "0") 'para rellenar en caso que sea menor que dos digitos
       TextBox2.Text = Minutos.ToString.PadLeft(2, "0")
       TextBox3.Text = Segundo.ToString.PadLeft(2, "0")
   End Sub

   
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       If TextBox3.Text = "" Then
           MsgBox("Indica el tiempo para Iniciar")
           Exit Sub
       End If
       Segundo = TextBox3.Text
       Minutos = TextBox2.Text
       Hora = TextBox1.Text
       Timer1.Enabled = True
 
   End Sub
   Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       Mx = Mx - 1
       If Mx = 0 Or Mx = -1 Then
           Mx = 9
           Segundo = Segundo - 1
           If Segundo = -1 Then
               Segundo = 59
               Minutos = Minutos - 1
               If Minutos = 0 Then
                   Minutos = 59
                   Hora = Hora - 1
               End If
           End If
           If Hora = 0 Then
               If Minutos = 0 Then
                   If Segundo = 0 Then
                       TextBox3.Text = "00"
                       Timer1.Enabled = False

                       'Aqui es donde termina el tiempo, y es donde tiene que
                       'inicar alguna de las variables "sonido o proceso"

                       Exit Sub
                   End If
               End If
           End If
           CalcularyMostrar()
       End If
   End Sub


   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Timer1.Enabled = False
       My.Computer.Audio.Stop()
   End Sub


   Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
       Label1.Text = Date.Now.ToLongTimeString
   End Sub

End Class



no se que es lo que no comprendo, pero no funciona :/

Eleкtro

Cita de: SyntaxError404 en 24 Mayo 2013, 16:43 PMgracias el codigo que me das Electro.. tal parece no funciona...

En ningúna parte de tú código veo que hayas usado el código que te he mostrado, tampoco veo que hayas declarado las variables de mi ejemplo.

PD: Aunque tampoco voy a testear un código sin que me des detalles de porque "no funciona"

Saludos!








SγиtαxEяяoя

#12
Cita de: EleKtro H@cker en 24 Mayo 2013, 17:00 PM
En ningúna parte de tú código veo que hayas usado el código que te he mostrado, tampoco veo que hayas declarado las variables de mi ejemplo.

PD: Aunque tampoco voy a testear un código sin que me des detalles de porque "no funciona"

Saludos!

Detalles: cuando selecciona la funcion de "sonido o proceso" esta automaticamente se inicia sin nisiquiera transcurrir el tiempo




Si, lo se lo elimine.. pues no se la forma correcta de como insertarlo

Public Class Form1
   Dim Hora As Integer
   Dim Segundo As Integer
   Dim Minutos As Integer
   Dim Mx As Integer
   Dim Run_Sound As Boolean = False
   Dim Run_Program As Boolean = False

   Private Sub CalcularyMostrar()
       TextBox1.Text = Hora.ToString.PadLeft(2, "0") 'para rellenar en caso que sea menor que dos digitos
       TextBox2.Text = Minutos.ToString.PadLeft(2, "0")
       TextBox3.Text = Segundo.ToString.PadLeft(2, "0")
   End Sub


   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       If TextBox3.Text = "" Then
           MsgBox("Indica el tiempo para Iniciar")
           Exit Sub
       End If
       Segundo = TextBox3.Text
       Minutos = TextBox2.Text
       Hora = TextBox1.Text
       Timer1.Enabled = True

   End Sub
   Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       Mx = Mx - 1
       If Mx = 0 Or Mx = -1 Then
           Mx = 9
           Segundo = Segundo - 1
           If Segundo = -1 Then
               Segundo = 59
               Minutos = Minutos - 1
               If Minutos = 0 Then
                   Minutos = 59
                   Hora = Hora - 1
               End If
           End If
           If Hora = 0 Then
               If Minutos = 0 Then
                   If Segundo = 0 Then
                       TextBox3.Text = "00"
                       Timer1.Enabled = False

                      If Run_Sound Then
                           ' play wav
                       ElseIf Run_Program Then
                           ' process.start()
                       Else
                           Throw New Exception("Wrong option")
                       End If


                       Exit Sub
                   End If
               End If
           End If
           CalcularyMostrar()
       End If
   End Sub


   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Timer1.Enabled = False
       My.Computer.Audio.Stop()
   End Sub


   Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
       Label1.Text = Date.Now.ToLongTimeString
   End Sub

   Private Sub RadioButtons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.Click, RadioButton2.Click
       Select Case sender.tag.tolower
           Case "sound" : Run_Sound = True : Run_Program = False
           Case "program" : Run_Program = True : Run_Sound = False
           Case Else : Throw New Exception("Wrong tagname")
       End Select
   End Sub
End Class

Eleкtro

#13
vamos, que no es dificil SyntaxError404

Pero si empeizas a usar if's anidados te puedes acabar liando.

Aquí tienes el source del siguiente form: http://elektrostudios.tk/WindowsApplication3.zip

Código (vbnet) [Seleccionar]
Public Class Form1

   Dim Run_Sound As Boolean = False
   Dim Run_Program As Boolean = False

   Dim TotalTime As Long
   Dim Time_Elapsed_Watch As New Stopwatch
   Dim Time_Remaining_Span As New TimeSpan()
   Dim WithEvents CountDown_Timer As New Timer

   Dim TimeIsOut As Boolean = False
   Dim Want_To_Stop As Boolean


#Region " Form "

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       RadioButton1.Tag = "sound"
       RadioButton2.Tag = "program"
   End Sub

   Private Sub RadioButtons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
                                                                                          RadioButton1.Click, _
                                                                                          RadioButton2.Click
       Select Case sender.tag.tolower
           Case "sound" : Run_Sound = True : Run_Program = False
           Case "program" : Run_Program = True : Run_Sound = False
           Case Else : Throw New Exception("Wrong tagname")
       End Select

   End Sub

   Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles _
                                                                     NumericUpDown1.ValueChanged, _
                                                                     NumericUpDown2.ValueChanged, _
                                                                     NumericUpDown3.ValueChanged

       TotalTime = (NumericUpDown1.Value * 3600000) _
                 + (NumericUpDown2.Value * 60000) _
                 + (NumericUpDown3.Value * 1000)

   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       TimeIsOut = False
       Want_To_Stop = False
       CountDown_Start()
       While Not TimeIsOut : Application.DoEvents() : End While
       If Not Want_To_Stop Then Time_Success()
   End Sub

   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
       Want_To_Stop = True
   End Sub

#End Region

#Region " Procedures "

   Private Sub CountDown_Start()
       Time_Remaining_Span = TimeSpan.FromMilliseconds(TotalTime + 1000)
       Time_Elapsed_Watch.Start()
       CountDown_Timer.Start()
   End Sub

   Private Sub CountDown_Timer_Tick(sender As Object, e As EventArgs) Handles CountDown_Timer.Tick

       Dim TimeRemaining As TimeSpan = Time_Remaining_Span - Time_Elapsed_Watch.Elapsed

       If Want_To_Stop Then TimeIsOut = True : Time_Elapsed_Watch.Reset() : CountDown_Timer.Stop()

       Try
           NumericUpDown1.Value = String.Format("{0:00}", CLng(Math.Floor(TimeRemaining.TotalHours)) Mod 999999999999999999)
           NumericUpDown2.Value = String.Format("{0:00}", CLng(Math.Floor(TimeRemaining.TotalMinutes)) Mod 60)
           NumericUpDown3.Value = String.Format("{0:00}", CLng(Math.Floor(TimeRemaining.TotalSeconds)) Mod 60)
       Catch
           TimeIsOut = True
           Time_Elapsed_Watch.Reset()
           CountDown_Timer.Stop()
       End Try

   End Sub

   Private Sub Time_Success()
       If Run_Sound Then
           MsgBox("Reproducir sonido")
       ElseIf Run_Program Then
           MsgBox("Ejecutar proceso")
       Else
           Throw New Exception("Wrong option")
       End If
   End Sub

#End Region
   
End Class


Saludos.








SγиtαxEяяoя

Veo que el codigo es muy diferente, cabe mencionar que uso VB.NET 2008

Al ver tu codigo, vi cosas que no habia visto antes  :-\

quede algo confundido, pues por lo que XresH me explico de otra manera.... siendo el mismo proceso pero con codigo diferente

pero se agradece tu intencion por ayudarme.. el codigo ahora si funciona, justo ahora mire tu ejemplo y a segun lo que entendi decidi crear uno nuevo y si funciono

Eleкtro

Cita de: SyntaxError404 en 24 Mayo 2013, 18:02 PM
Veo que el codigo es muy diferente

Sólamente he usado los códigos de ejemplo que te puse, con alguna que otra modificación.

El proyecto está hecho en VS2012, VB.NET

Saludos








XresH

Cita de: SyntaxError404 en 24 Mayo 2013, 18:02 PM
Veo que el codigo es muy diferente, cabe mencionar que uso VB.NET 2008

Al ver tu codigo, vi cosas que no habia visto antes  :-\

quede algo confundido, pues por lo que XresH me explico de otra manera.... siendo el mismo proceso pero con codigo diferente

pero se agradece tu intencion por ayudarme.. el codigo ahora si funciona, justo ahora mire tu ejemplo y a segun lo que entendi decidi crear uno nuevo y si funciono

No vamos a explicarte el código de la misma forma, tenemos maneras distintas de programar, cosa que es normal.

Lograr mismos resultados con diferentes métodos es algo común y corriente.

Por lo que no vamos a explicartelo de la misma forma, jamas, porque tanto electro como yo tenemos nuestra forma de hacer las cosas, lo importante es que entiendas las ideas que te explicamos y los coódigos expuestos, para que lo apliques junto con tu conocimiento actual.

Pudiste resolver tus dudas al final? reitero lo importante es que comprendas lo que te planteamos!

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

SγиtαxEяяoя

Miren esta manera mucho mas sencilla de usar el cronometro

Public Class Form1
    Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
        tmrWatch.Start()
    End Sub
    Private Sub btnStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStop.Click
        tmrWatch.Stop()
    End Sub
    Private Sub tmrWatch_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrWatch.Tick
        txtTenths.Text -= 1
        If txtTenths.Text = -1 Then
            txtTenths.Text = 9
            txtSeconds.Text -= 1
            If txtSeconds.Text = -1 Then
                txtSeconds.Text = 59
                txtMinutes.Text -= 1
                If txtMinutes.Text = -1 Then
                    txtMinutes.Text = 59
                    txtHours.Text -= 1
                    If txtHours.Text = -1 Then
                        txtHours.Text = 23
                        txtDays.Text -= 1
                        If txtDays.Text = -1 Then
                            tmrWatch.Stop()
                            txtTenths.Text = "0"
                            txtSeconds.Text = "0"
                            txtMinutes.Text = "0"
                            txtHours.Text = "0"
                            txtDays.Text = "0"
                        End If
                    End If
                End If
            End If
        End If
    End Sub

Eleкtro

Te parece más sencillo porque aún no has aprendido a dominar un select case para evitar tanta cantidad de if's o usar el StopWatch como en el ejemplo que te puse, podrías practicar con ellos.

Quizás te parezca más sencillo con if's pero a mi por lo menos no me parece una forma práctica de hacerlo, además es un poco inteligible y da sensación de "desordenado".
Sabemos el propósito de esos if's, pero si no lo supieramos entonces costaría de adivinarlo a la primera y habría que leer ese bloque de código varías veces para saber que hace tanto If,
aparte no recuerdo quien fue el que te comentó que el Timer no es tán preciso como el StopWatch, pero es algo que debiste tomar en cuenta.

un saludo!









SγиtαxEяяoя

Cita de: XresH en 25 Mayo 2013, 01:30 AM
No vamos a explicarte el código de la misma forma, tenemos maneras distintas de programar, cosa que es normal.

Lograr mismos resultados con diferentes métodos es algo común y corriente.

Por lo que no vamos a explicartelo de la misma forma, jamas, porque tanto electro como yo tenemos nuestra forma de hacer las cosas, lo importante es que entiendas las ideas que te explicamos y los coódigos expuestos, para que lo apliques junto con tu conocimiento actual.

Pudiste resolver tus dudas al final? reitero lo importante es que comprendas lo que te planteamos!

Saludos.



Si, logre lo que esperaba.. Gracias a ustedes dos por su colaboracion :)