Comment accéler un timer à donf' de chez donf' ?!!

Signaler
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015
-
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Salut, j'ai envie de me faire une machine à voyager dans le temps (mais qui ne marcherai pas dans la réalité :D)
Genre le défilement des dates, des heures tout ça, comme dans le film "la machine à voyager dans le temps"...

Je sais faire une horloge complète genre :

seconde
minutes
heures
jours
mois
année
siècle

mais qui puisse aussi speeder comme pas possible, en restant cohérente, ben nan...
Le fait est que concernant les timers, j'arrive pas à descendre en dessous du "1", parce que quand je met à 1, il n'y a guère que les secondes voire les minutes, et très très peu, les heures qui speedent, le reste se traine un peu... et pour passer d'un jour à l'autre on a le temps de dormir quoi.
Pour l'instant j'ai fait un truc bidon, avec les ss, mm et hrs qui speedent comme des malades, mais les 3 données ne se suivent pas, bien sûr...
Et j'ai appliqué le 1 aux jours. Les mois évoluent et les années e les siècles, avec cohérence...

Une idée pour contrer ce "contre-temps" et faire un truc cohérent des Secondes aux Siècles? :D
A voir également:

9 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
un timer ne descendra pas a un intervalle de 1 milliseconde.
encore qu'avec une valeur si basse, RIEN ne garanti son exactitude...

quand a l'interet de la chose...

Private Sub Form_Load()
Dim nTime As Long
Me.Show
Do
nTime = nTime + 789
If (nTime And &H800) = 0 Then
Label1.Caption = DateAdd("s", nTime, Date)
DoEvents
End If
Loop
End Sub
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Curieux projet, sympa
Impossible de te dire ce qui cloche dans ton affaire sans avoir le code sous les yeux.
La seule manière d'être cohérent entre toutes ces données, liées par des coefficients, est de n'avoir qu'une seule variable.
C'est cette variable qu'il faut manipuler dans ton Timer qui tourne à donf de super donf de la mort.
Après chaque modif de cette valeur, il faudra recalculer les ss, nn, hh, dd, mm, yy, cc ... et les afficher dans tes Labels.

Pour des dates courantes (de notre époque), les fonctions DateDiff, DateAdd, DatePart ... seraient toute indiquée, mais il me semble elles ne savent fonctionner qu'entre 1750 et 2099 (à confirmer)
Sinon, il ne reste plus qu'à calculer toi même ces éléments à partir d'un chiffre qui représenterait le nombre de secondes écoulées depuis le 1er janvier de l'an 1 et vérifier que ce chiffre tienne dans un double.
Le principe de calcul des dates est le même que pour les puissances : Il faut d'abord traiter l'extraction du plus gros chiffre = le siècle :
Soit X mon chiffre
Soit Y le nombre de secondes dans un siècle.
A:
Si X - Y > 0 alors
   Siècles = Siècles + 1
   X = X - Y
   Reboucle en A:

Quand cette boucle sera terminée, il suffira d'en faire une autre avec les années :
Soit X mon chiffre (diminué des siècles du dessus)
Soit Y le nombre de secondes dans un an
B:
Si X - Y > 0 alors
   Années = Années + 1
   X = X - Y
   Reboucle en B:

et ainsi de suite

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

Merci pour la rapidité de vos réponses ! J'ai vb au taf mais je ne l'utilise pas, j'ai quand meme testé ton code Renfield, ça tue, rien à dire !!!!!!!! Merci...

Ce soir je vais essayer de voir, Jack, ce que tu as dis, et je mettrais aussi le code que j'avais fait, à titre d'info uniquement puisque... c'est surclassé là, mdr !

Bon, je retourne bosser, Merci encore !!

A pluch' !
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

Hm, pour l'intéret, c'est juste pour délirer, cela dit ça peut etre utiliser comme... une appli orienté histoire pour des élèves qui sait? Acitiver une machine à remonter le temps c'est toujours plus marrant que de feuilleter un bouquin !!
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
en passant, le 789 a été choisit au hasard ^^ juste pour que la valeur n'évolue pas simplement de 10 en 10 ^^
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

vivivi, j'ai remplacer les 789 par 1, j'ai vu que la vitesse variait... :), si j'ai le temps je vais emprunter VB à mon collègue pour faire des essais, j'ai hate de revenir en 1986 pour aller voir des super films au ciné
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

hm... et jouer au loto, évidement
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

J'ai pas eu le temps encore de zieuter, des trucs urgent à faire, comme d'hab... j'ai mis ma source d'essai d'avant mon message :
http://vegetalain.free.fr/0.rar

Renfield, ta soluce est vraiment cool, mais j'arrive pas trop à la "parceliser" dans plusieurs label, hm, je vais me pencher sur celle de Jack on va bien voir... dans... la limite de temps que je trouverais, hihihi !h

Bonne zournée !
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
rar survollé...

Outils > Options > Déclaration des variables obligatoire

(très important)

ca ajouteras 'Option Explicit' en tête des nouveaux modules, forms, etc.

mois_Change.... interesses toi à MonthName

hrs = Format$(Time, "hh")
utilises la fonction Minute
inutile de passer par une string, c'est lourd (idem pour second, Hour, Day, Month et Year)


après, y'a beaucoup trop de code...

dnas le fond, une date, c'est un nombre de jour depuis le samedi 30 décembre 1899 à minuit)

? formatnumber(cdbl(TimeSerial(0,0,1)),7)
0,0000116

une seconde, représente donc, en gros 0.0000116
? .000011574074075*60*60*24
1,00000000008

a la limite, en incrémentant un double de 0.0000116, donc, tu y ajoutes une seconde. (possible aussi, comme l'indique notre ami d'utiliser DateAdd...