Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-04-2009, 21:06   #1
Alby2691
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 11
[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 in spiler il codice che ho scritto :

Codice:
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
Alby2691 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 21:12   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2780
Ciao, il problema penso sia dovuto al fatto che i timer non sono perfetti, nel senso che se metti un timer che scatta ogni secondo in realtà questo scatterà a volte dopo 1000 ms, a volte dopo 1002 ms, e così via. C'è un margine di errore. Per un programma del genere dovresti sincronizzarti con l'orologio di sistema. Non so come si fa in VB6, comunque dovresti cercare informazioni in questo senso.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 09:39   #3
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Piccolo esempio : poniamo di avere una semplice Form con questo codice :

Codice:
Private startDate As Date
Private secAuto As Integer
Private secSys As Integer

Private Sub cmd_start_Click()
    secAuto = 0
    secSys = 0
    startDate = Now
    Timer_auto.Enabled = True
    Timer_sys.Enabled = True
End Sub

Private Sub Timer_auto_Timer()
    secAuto = secAuto + 1
    lbl_auto.Caption = secAuto
End Sub

Private Sub Timer_sys_Timer()
    secSys = DateDiff("s", startDate, Now)
    lbl_sys.Caption = secSys
End Sub
Timer_auto segna il tempo "per conto suo", mentre Timer_sys lo segna interrogando ogni secondo la data di sistema. Entro i primi 3 minuti i due timer hanno già una differenza di 1 secondo.
Se vuoi essere sempre sincronizzato col sistema usa il secondo metodo ( Timer_sys ). Inoltre non è necessario tenere a 1000 l'intervallo del Timer_sys, ma dal momento che l'incremento viene sempre fatto sul confronto con il Timer di sistema, si possono usare intervalli più precisi ( 50 ... ).
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 15:01   #4
Alby2691
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 11
ah, grazie mille ho capito ^^

Però non ho mai usato la funziona DateDiff, infatti se faccio un form come quello che riporti tu mi da errore. Non è che devo mettere qualche API per usare DateDiff ?

Ultima modifica di Alby2691 : 22-04-2009 alle 15:05.
Alby2691 è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 15:48   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Alby2691 Guarda i messaggi
ah, grazie mille ho capito ^^

Però non ho mai usato la funziona DateDiff, infatti se faccio un form come quello che riporti tu mi da errore. Non è che devo mettere qualche API per usare DateDiff ?
No, DateDiff è proprio una funzione VB6 standard. Molto strano come errore...
Sicuro di aver fatto tutto come nell'esempio ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 21:02   #6
Alby2691
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 11
Si ho fatto tutto uguale, ovvimante ho fatto anche le rinominazioni adeguate.

L'errore che mi da è Run-time error:"6" owerflow, evidenziando di giallo questa riga di codice secSys = DateDiff("s", startDate, Now)

ho provato a cambiare secSys da Integer a Long, Date, Variant, Double e Single . Con alcuni di questi tipi di dati non da errore ma nella label appaiono numeri senza senso che non sembra centrino con data o ora. ( almeno a un inesperto come me sembrano senza senso )

Ho visto nella guida online di MSDN la descrizione sulla funzione DataDiff() ma non ci ho capito molto. Forse se riuscissi a far girare il codice che hai scritto potrei capire molto meglio
Alby2691 è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 22:40   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Alby2691 Guarda i messaggi
Si ho fatto tutto uguale, ovvimante ho fatto anche le rinominazioni adeguate.
Prova il mio codice così com'è in un nuovo progetto, senza fare rinominazioni o modifiche e vedrai che gira. Forse nelle rinominazioni hai combinato qualcosa...
Inoltre la funzione da dare in pasto alla DateDiff è Now, che prende tutta la data di sistema corrente comprese H, min e sec.
Se ad esempio usi Date ( che ottiene solo la data senza orario ), ovviamente il metodo va in Overflow.
Successivamente lo puoi adattare, ma rispettando sempre la condizione DateDiff ( "s", dataDiPartenza, dataAttuale ), ove "s" = differenza tra date espressa in secondi / dataDiPartenza e dataAttuale sono date pure, complete della parte oraria, perciò niente formattazioni.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 17:14   #8
Alby2691
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 11
Certo cose proprio nn le capisco. Avevo già compilato il tuo codice in un progetto nuovo e fino a ieri non andava. Oggi lo avvio senza modificare nulla e funziona .

Comunque grazie, ora dovrei essere in grado di compilare il programma. Però se ho problemi torno subito qui

Grazie ancora

P.S Conosci mica l'API per ridurre il programma nella barra delle attività ? su internet non ho trovato nulla

P.S.2 Sai mica se c'è una qualche funzione o API (più probabilmente) per far riconoscere al programma quando una connessione a internet viene stabilita o viceversa ?
Alby2691 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 18:03   #9
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Alby2691 Guarda i messaggi
P.S Conosci mica l'API per ridurre il programma nella barra delle attività ? su internet non ho trovato nulla
Avevo già risposto su questo argomento a qualcuno, ma al momento non ricordo il Thread... Intanto guarda qui, c'è un tutorial :
http://www.trap17.com/index.php/tuto...ray_t6940.html

Quote:
Originariamente inviato da Alby2691 Guarda i messaggi
P.S.2 Sai mica se c'è una qualche funzione o API (più probabilmente) per far riconoscere al programma quando una connessione a internet viene stabilita o viceversa ?
Dovrebbe essere questa se non sbaglio :
Codice:
Private Declare Function InternetGetConnectedState Lib "wininet" (ByRef dwflags As Long, ByVal dwReserved As Long) As Long
Tu che dici ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 18:28   #10
Alby2691
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 11
Grandissimo !!!
Sei un genio =P

Però i problemi ci sono sempre, ora sto riguardando bene il codice per minimizzare nella try perchè fino ad ora mi da un errore (Compile error : ByRef argument type mismatch) e mi evidenzia "Sub minimize_to_tray()" e anche "Shell_NotifyIcon NIM_ADD, nid"

Per la API della connessione....non so come inserirla in una IF. Ho provato a fare "If InternetGetConnectedState = true then" ma immagino che sia una gran castroneria.

Grazie ancora, ora vedo di gaurdare per bene la "guida"

EDIT : come immaginavo. L'errore della try non si ripresenta in un progetto nuovo >.<
EDIT2: Grazie mille. Ho quasi terminato il programma col tuo aiuto, mi manca solo una piccola parte. Al posto del tasto Start e dello Stop vorrei usare l'API della connessione. Mi spiego meglio : vorrei mettere un timer2 con intervallo 1(per essere il più preciso possibile) nel quale scrivo una condizione dove controllo se la connessione a internet è attiva. Se è attiva il timer1 parte. Se si disattiva il timer1 viene disabilitato. Solo che non so come scrivere in codice questa condizione.

Ultima modifica di Alby2691 : 23-04-2009 alle 22:42.
Alby2691 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 23:39   #11
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Alby2691 Guarda i messaggi
vorrei mettere un timer2 con intervallo 1(per essere il più preciso possibile) nel quale scrivo una condizione dove controllo se la connessione a internet è attiva. Se è attiva il timer1 parte. Se si disattiva il timer1 viene disabilitato. Solo che non so come scrivere in codice questa condizione.
1. Fossi in te non lo farei. Un Timer che esegue codice non banale ( e interrogare il sistema sullo stato della connessione attraverso API Call non lo è ) con Interval=1 rischia di disfunzionare... Secondo me 1 msec non ti serve, vanno benissimo ad es. 100 msec.

2. Dai senz'altro un'occhiata a questa implementazione della InternetGetConnectedState, valida e completa :
http://vbnet.mvps.org/index.html?cod...ectedstate.htm
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Grazie a VLT è stata misurata dir...
Blue Origin annuncia un aerofreno ripieg...
Blue Origin annuncia una nuova versione ...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v