Timer et temps restant [Résolu]

Sinsitrus 863 Messages postés samedi 11 juin 2005Date d'inscription 21 août 2015 Dernière intervention - 13 oct. 2012 à 22:33 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 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
Afficher la suite 

16 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 18:58
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
Utilisateur anonyme - 14 oct. 2012 à 01:56
0
Utile
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...
Commenter la réponse de Utilisateur anonyme
NHenry 14138 Messages postés vendredi 14 mars 2003Date d'inscription 26 avril 2018 Dernière intervention - 14 oct. 2012 à 01:56
0
Utile
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
---
Commenter la réponse de NHenry
Sinsitrus 863 Messages postés samedi 11 juin 2005Date d'inscription 21 août 2015 Dernière intervention - 14 oct. 2012 à 02:29
0
Utile
Un truc du genre ?
L_Rebour = (TimerPrepar.Interval / ProgressBar.Value) * ProgressBar.Value - 100
Commenter la réponse de Sinsitrus
Sinsitrus 863 Messages postés samedi 11 juin 2005Date d'inscription 21 août 2015 Dernière intervention - 14 oct. 2012 à 02:32
0
Utile
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...
Commenter la réponse de Sinsitrus
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 06:41
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 06:43
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 07:10
0
Utile
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
Commenter la réponse de ucfoutu
Sinsitrus 863 Messages postés samedi 11 juin 2005Date d'inscription 21 août 2015 Dernière intervention - 14 oct. 2012 à 13:24
0
Utile
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
Commenter la réponse de Sinsitrus
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 15:01
0
Utile
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
Commenter la réponse de ucfoutu
Sinsitrus 863 Messages postés samedi 11 juin 2005Date d'inscription 21 août 2015 Dernière intervention - 14 oct. 2012 à 15:45
0
Utile
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
...
Commenter la réponse de Sinsitrus
Sinsitrus 863 Messages postés samedi 11 juin 2005Date d'inscription 21 août 2015 Dernière intervention - 14 oct. 2012 à 15:49
0
Utile
Pardon
L_Rebour = CInt(CStr(TimerProgress.Interval / ProgressBar.Value) * (ProgressBar.Value - 100))
Commenter la réponse de Sinsitrus
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 17:21
0
Utile
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
Commenter la réponse de ucfoutu
Sinsitrus 863 Messages postés samedi 11 juin 2005Date d'inscription 21 août 2015 Dernière intervention - 14 oct. 2012 à 18:00
0
Utile
Tu peux néanmoins m'aider à le faire comme je le souhaitais stp ?
Commenter la réponse de Sinsitrus
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 18:30
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 14 oct. 2012 à 18:34
0
Utile
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
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.