Timer et temps restant

Résolu
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 13 oct. 2012 à 22:33
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 14 oct. 2012 à 18:58
Salut à tous !

Alors voilà, j'ai un :
Timer.interval = 370
ProgressBar.value = 0
Un label qui doit m'afficher le temps restant avant que le ProgressBar.value soit égale à 100

J'ai essayé, mais j'obtiens une valeur de 370-1 à chaque intervalle.
Pouvez-vous m'aider svp a avoir le temps du rebour en minute et seconde ?

Merci de votre aide.

----------
OS : Windows 7 Pro 64 Bit
Platforme : Visual Basic 6.0
A voir également:

16 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 18:58
Allez va (pour en finir avec ce sujet élémentaire) :
Exemple tellement auto-explicite que je me refuse catégoriquement de le commenter :
Private duree As Long, depart As Long
Private Sub Command1_Click()
  duree = 12
  depart = Timer
   Label1.Caption = "restent " & duree & " secondes"
  Timer1.Enabled = True
  Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
  Dim D As Long
  D = duree - (Timer - depart)
  Label1.Caption = "restent " & D & " secondes"
  If D <0 Then Timer1.Enabled False
End Sub

Si tu ne t'en sors pas avec cela ...(y compris pour transformer - quand-même - au besoin des secondes en minutes et secondes), je ne peux rien pour toi ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
Utilisateur anonyme
14 oct. 2012 à 01:56
Bonjour,

Cela fait longtemps que j'ai abandonné VB6 et je ne l'ai pas réinstallé en changeant de machine, mais, sur VB.net les données d'intervalles et de temps d'un Timer doivent être exprimées en millisecondes. Il faudrait que tu vérifies cela dans VB6.

Tu dois faire correspondre d'une façon ou d'une autre tes (milli)secondes et ton Timer. Si tu veux une barre de progression en pourcentage tu vas avoir besoin de déterminer à quel pourcentage du temps total doivent correspondre tes 370 unités de temps. Et puis, compte tenu que le temps d'exécution peut varier énormément d'un passage à un autre et dépendre de la vitesse du processeur, de la mémoire disponible, du nombre de processus simultanés dans la machine et sans doute de quantité d'autres choses, j'ai l'impression que tu peux n'espérer qu'un résultat approximatif.

Ceci dit, je pense que ta question manque de précision, entre autres le temps maximal d'exécution, pourquoi 370 (milli)secondes ou autres etc...
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 oct. 2012 à 01:56
Bonjour,

Pour faire simple, essayes de :
- Mémoriser le temps passé depuis le début du comptage
- Divises le temps passé par le pourcentage effectué
- Multiplies par le pourcentage restant.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
14 oct. 2012 à 02:29
Un truc du genre ?
L_Rebour = (TimerPrepar.Interval / ProgressBar.Value) * ProgressBar.Value - 100
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
14 oct. 2012 à 02:32
J'ai essayé ceci:
L_Rebour = (TimerPrepar.Interval / ProgressBar.Value) * (ProgressBar.Value - 100)


Il compte effectivement a reculons, mais en millisecondes...
Si le calcul est juste, il va falloir convertir milliseconde en temps... minute et secondes...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 06:41
Bonjour,
Une barre de progression ne constate pas le temps écoulé, mais le travail accompli. Et ce travail ne progresse pas nécessairement à une vitesse constante, alors que le timer, lui, a une fréquence constante.
Partant de ce constat, la seule manière "orthodoxde" que je connaisse est la suivante et nécessite un repaire de completion du travail TRTOTAL à accomplir (par exemple : nombre de fichiers, nombre d'octets, de tâches, etc ... selon le cas de figure)
- dès le 2eme battement :
----- constat du travail TREFFECTUE effectué et du temps réel écoulé T (par datediff et non en nombre de battements) et détermination de la vitesse "en cours" (V = TREFFECTUE/T)
----- on en déduit (puisque l'on connait le volume total TRTOTAL du travail à effectuer) le travail restant à faire (TRRESTANT = TRTOTAL) et le temps qu'il faudra (TRRESTANT/V), c'est à dire ce que l'on veut afficher !
Et pareil pour tous les battements suivants, en incrémentant chaque fois T du temps réeel constaté depuis son dernier relevé (idem pour TREFFECTUE)
Cette méthode est la seule qui, à ma connaissance, permet de faire des estimations du temps restant en fonction des constatations du temps écoulé et du travail déjà accompli. En rappelant qu'une vitesse de traitement peut varier d'un instant à l'autre : processeur, par exemple, mais également : si la "constatation" se fait par nombre de fichiers traités et non d'octets : le poids des fichiers lui-même.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 06:43
Corriger : ===>>>
.... restant à faire (TRRESTANT = TRTOTAL - TREFFECTUE ) et le temps .....


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 07:10
Bon. Café pris, je vais m'exprimer autrement pour que l'on (les puristes) comprenne mieux ce dont j'ai parlé plus haut :
- l'avancement d'un timer répond à une équation linéaire
alors que
- l'avancement d'une tache relève de la constatation et donc de l'empirisme. Il ne répond pas à une équation linéaire.
Il doit donc être clair dans tous les esprits que :
- le temps restant estimé, dont le calcul est basé sur l'empirisme, peut aussi bien décroître que croître. (vous en avez des exemples à quasiment chaque téléchargement de programme).
- que plus le travail "avance", plus l'estimation est fine, puisque empirisme plus avancé.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
14 oct. 2012 à 13:24
Merci ucfoutu pour tout ces détails.
Tu as absolument raison sur le tout. Par contre, je voulais juste afficher un texte que l'utilisateur lira en X minutes et X secondes...
Voilà pourquoi ici j'utilise de ProgressBar :s
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 15:01
Une barre de progression pour çà ?
On rêve, là !
Quelle "progression" ?
Tu es dans la tête du lecteur, toi, pour savoir où il en est de sa lecture ?
Quelque chose de fondamental m'échappe (ou t'échappe) apparemment !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
14 oct. 2012 à 15:45
lol, non pas du tout...
C'est un jeu de test en fait...
J'apprends a ma belle sœur à lire en français. Elle m'a demandé de lui faire une petite fenêtre pour savoir en si elle sera plus rapide que ma femme à la lecture.

Elle avance au fur et à mesure et fais un concoure avec ma femme.

Elle colle le texte à lire et la barre de progression affiche le temps restant pour finir la lecture... voilà tout :p

Alors j'ai réussi le tout, mais :
Private Sub TimerProgress_Timer()
ProgressBar.Value = ProgressBar.Value + 1

On Error Resume Next
L_Rebour = CInt(CStr(TimerPrepar.Interval / ProgressBar.Value) * (ProgressBar.Value - 100))

L_Rebour = Conversion(L_Rebour)

If ProgressBar.Value 100 Then MsgBox "": TimerProgress.Enabled False
End Sub

Private Function Conversion(Durée As Long) As String
Dim Temps As Long, Heures As Integer, Minutes As Integer, Secondes As Integer
Temps = Durée ' Temps en secondes
Secondes = Temps Mod 60
Temps = (Temps - Secondes) \ 60 ' Temps en minutes
Minutes = Temps Mod 60
Heures = (Temps - Minutes) \ 60
Conversion = Heures & " heu " & Minutes & " min " & Secondes & " sec."
End Function
...
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
14 oct. 2012 à 15:49
Pardon
L_Rebour = CInt(CStr(TimerProgress.Interval / ProgressBar.Value) * (ProgressBar.Value - 100))
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 17:21
Aucun besoin d'une barre de progression pour cela ! C'est totalement abusif et inutile !
Tu n'as besoin que d'un timer et d'un label pour y afficher un compte à rebours !
Il ne faut pas confondre les choses et perdre ton temps avec ce qui ne serait là qu'une "bébelle" (destinée à quoi ? A épater la galerie et alourdir ton appli ?)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
14 oct. 2012 à 18:00
Tu peux néanmoins m'aider à le faire comme je le souhaitais stp ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 18:30
Tu me poses une question. Je te réponds donc : non, sauf ainsi (et à toi de faire ta "bébelle", mais sans ma complicité) :
La durée d'affichage étant donc connue :
- dans l'évènement timer du contrôle timer : calculer la différence D entre le résultat de la fonction Timer et le relevé de cette fonction au tout début.
- Transposer D (des secondes) en minutes et secondes (arithmétique élémentaire) et afficher ce résultat.
Et maintenant : fais gaffe à ce que j'ai souligné (l'évènement Timer, le contrôle Timer et la fonction Timer sont trois choses fort différentes. A apprendre dans ton aide VB6 si encore non connues de toi).
J"'arrête là.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 oct. 2012 à 18:34
Pardon (occupé à bavarder en même temps) :
- dans l'évènement timer du contrôle timer : calculer la différence D entre le résultat de la fonction Timer et le relevé de cette fonction au tout début.
calculer la différence D1 = Durée (en secondes) fixée - D
Arrêter le timer (évident) lorsque D est supérieur ou égal à la durée fixée.
- Transposer D1 (des secondes)... etc...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous