Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB6]Creare una specie di orologio ^^

    Ciao a tutti, sto provando a creare un programma in visual basic 6 che da quando viene cliccato il pulsante "Start" comincia a contare il tempo (hh-mm-ss) e in contemporanea, partendo da 14m e 59s, mi scali quel tempo fino a 0m e 0s dove, a quel punto, aumenta di uno un contatore, e ricomincia a scalare il tempo da 0. Sono riuscito a scrivere una gran parte di codice e gira tutto bene......per i primi 5/6 minuti, dopodichè il conteggio del tempo incomincia ad avere 2 secondi in meno, e il contdown dei 15m ad essere 2 secondi sopra il normale(ho usato un cronometro per controllare). Ho cercato un paio di soluzioni ma il codice mi sembra giusto cosi. Quindi chiedo a voi esperti se sapete risolvere questo problema. Oppure se conosciete un altro metodo per costruire questo programma ^^

    Metto il codice che ho scritto :

    Dim th As Long 'tempo in ore per ogni sessione
    Dim tm As Long 'tempo in minuti per ogni sessione
    Dim ts As Long 'tempo in secondi per ogni sessione
    Dim sc As Long 'contatore degli scatti
    Dim tm2 As Long 'tempo in minuti per contare gli scatti
    Dim ts2 As Long 'tempo in secondi per contare gli scatti
    Dim tm3 As Long 'tempo in minuti per calcolare tempo residuo
    Dim ts3 As Long 'tempo in secondi per calcolare tempo residuo

    Private Sub cmdstart_Click()
    Timer1.Enabled = True
    Timer2.Enabled = True
    Timer3.Enabled = True
    End Sub

    Private Sub cmdstop_Click()
    Timer1.Enabled = False
    Timer2.Enabled = False
    Timer3.Enabled = False
    End Sub


    Private Sub Form_Load()
    Timer1.Enabled = False
    Timer2.Enabled = False
    Timer3.Enabled = False
    th = 0
    tm = 0
    ts = 0
    tm2 = 0
    ts2 = 0
    tm3 = 14
    ts3 = 60
    sc = 1
    End Sub


    Private Sub timer1_timer()

    ts = ts + 1
    If ts = 59 Then
    tm = tm + 1
    ts = 0
    End If
    If tm = 59 Then
    th = th + 1
    tm = 0
    End If

    lbltempom.Caption = tm & "m"
    lbltempos.Caption = ts & "s"
    lbltempoh.Caption = th & "h"

    End Sub
    Private Sub Timer2_Timer()
    ts2 = ts2 + 1
    If ts2 = 60 Then
    tm2 = tm2 + 1
    ts2 = 0
    If tm2 = 15 Or tm2 = 30 Or tm2 = 45 Or tm2 = 60 Then
    sc = sc + 1
    End If
    End If
    If tm2 = 60 Then
    tm2 = 0
    End If
    lblscatti.Caption = sc
    End Sub

    Private Sub Timer3_Timer()
    lbltemporimm.Caption = tm3 & "m"
    lbltemporims.Caption = ts3 & "s"

    ts3 = ts3 - 1
    If ts3 = 0 Then
    lbltemporims = ts3 & "s"
    tm3 = tm3 - 1
    If tm3 = -1 Then
    tm3 = 2
    End If
    ts3 = 60
    End If
    If tm3 = 0 And Not ts3 = 0 Then
    lbltemporimm.Caption = 0
    End If

    lbltemporimm.Caption = tm3 & "m"
    lbltemporims.Caption = ts3 & "s"

    End Sub

    edit: non mette le rientranze...

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Non è proprio il massimo contare il tempo hh:mm.ss con dei Timer usando delle variabili, usa le funzioni appropriate.

    Poi scusa ma questo:

    codice:
    ts = ts + 1
    If ts = 59 Then
    tm = tm + 1
    ts = 0
    End If
    If tm = 59 Then
    th = th + 1
    tm = 0
    End If
    Sarà semmai:

    codice:
    ts = ts + 1
    If ts > 59 Then
    tm = tm + 1
    ts = 0
    End If
    If tm > 59 Then
    th = th + 1
    tm = 0
    End If
    Sbagliare è umano, perseverare è diabolico.

  3. #3

    Re: [VB6]Creare una specie di orologio ^^

    Originariamente inviato da Alby2691
    Ciao a tutti, sto provando a creare un programma in visual basic 6 che da quando viene cliccato il pulsante "Start" comincia a contare il tempo (hh-mm-ss) e in contemporanea, partendo da 14m e 59s, mi scali quel tempo fino a 0m e 0s dove, a quel punto, aumenta di uno un contatore, e ricomincia a scalare il tempo da 0. Sono riuscito a scrivere una gran parte di codice e gira tutto bene......per i primi 5/6 minuti, dopodichè il conteggio del tempo incomincia ad avere 2 secondi in meno, e il contdown dei 15m ad essere 2 secondi sopra il normale(ho usato un cronometro per controllare). Ho cercato un paio di soluzioni ma il codice mi sembra giusto cosi. Quindi chiedo a voi esperti se sapete risolvere questo problema. Oppure se conosciete un altro metodo per costruire questo programma ^^
    Come ti ha gia' detto "Pirelli72", non e' il metodo migliore...

    Nei sistemi multitasking, insieme al tuo programma girano una miriade di processi di sistema, oltre ad altri programmi utente, per cui non si puo' pretendere che un timer programmato per eseguire una routine 1 volta al secondo, venga eseguito ESATTAMENTE una volta al secondo ! Intendiamoci... normalmente e' cosi', ma in certe condizioni un ritardo e' inevitabile (accessi al disco, antivirus in esecuzione, processi di sistema, processi con priorita' piu' elevata....), e col tuo sistema gli eventuali ritardi finiscono per accumularsi, e produrre l'imprecisione che hai rilevato.

    Si puo' ovviare pero' in maniera molto semplice:
    - utilizza l'orologio interno per rilevare i tempi, con la funzione Now (che restituisce la data e ora interna, nel momento in cui viene chiamata).
    - rileva il tempo trascorso con la funzione DateDiff(), come numero di secondi trascorsi tra l'attivazione del programma (in cui memorizzarai l'istante iniziale in una variabile ad es. t1, di tipo Date) e quello in cui scade l'Interval del tuo timer (dovrai poi trasformare i secondi nel.. conto alla rovescia, ma e' banale)


    Originariamente inviato da Alby2691
    edit: non mette le rientranze...
    devi usare il tasto # (code) che inserisce gli appositi tag, dopo di che quello che inserisci tra i due tag di inizio e fine mantiene l'indentazione originale.
    IceCube_HT (VB6 fan Club)

  4. #4
    Non è proprio il massimo contare il tempo hh:mm.ss con dei Timer usando delle variabili, usa le funzioni appropriate. Poi scusa ma questo: codice: ts = ts + 1 If ts = 59 Then tm = tm + 1 ts = 0 End If If tm = 59 Then th = th + 1 tm = 0 End If Sarà semmai: codice: ts = ts + 1 If ts > 59 Then tm = tm + 1 ts = 0 End If If tm > 59 Then th = th + 1 tm = 0 End If
    Guarda ho cambiato quella if tantissime volte(=59 oppure =60) ma comunque il divario di secondi rimane.



    Nei sistemi multitasking, insieme al tuo programma girano una miriade di processi di sistema, oltre ad altri programmi utente, per cui non si puo' pretendere che un timer programmato per eseguire una routine 1 volta al secondo, venga eseguito ESATTAMENTE una volta al secondo ! Intendiamoci... normalmente e' cosi', ma in certe condizioni un ritardo e' inevitabile (accessi al disco, antivirus in esecuzione, processi di sistema, processi con priorita' piu' elevata....), e col tuo sistema gli eventuali ritardi finiscono per accumularsi, e produrre l'imprecisione che hai rilevato.
    In effetti aveva una mezza idea che il problema fosse questo ^^


    Si puo' ovviare pero' in maniera molto semplice: - utilizza l'orologio interno per rilevare i tempi, con la funzione Now (che restituisce la data e ora interna, nel momento in cui viene chiamata). - rileva il tempo trascorso con la funzione DateDiff(), come numero di secondi trascorsi tra l'attivazione del programma (in cui memorizzarai l'istante iniziale in una variabile ad es. t1, di tipo Date) e quello in cui scade l'Interval del tuo timer (dovrai poi trasformare i secondi nel.. conto alla rovescia, ma e' banale)
    Grazie di avermi Illuminato sulla funziona DateDiff() che non conoscievo, ora dovrei essere in grado finire il programma ^^

    grz mille =)

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Originariamente inviato da Alby2691
    Guarda ho cambiato quella if tantissime volte(=59 oppure =60) ma comunque il divario di secondi rimane.
    Con il =59 sicuramente di mangiavi i secondi, esattamente 1 secondo ogni minuto reale...
    Sbagliare è umano, perseverare è diabolico.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.