IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Imcompréhension de calcul avec progressbar et timer


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut Imcompréhension de calcul avec progressbar et timer
    Bonjour,

    J'essaie de me faire un petit programme qui me permettrai de faire descendre une progressbar qui représente une quantité de liquide selon une heure défini par l'utilisateur.

    Textbox1.text correspond à la contenance de base (exemple : 4000ml)
    Textbox2.text correspond à la dose qui sera soustrait à l'heure souhaité (exemple : 200 ml)
    Label99.text correspond au résultat
    label78.text me permet de faire la boucle de soustraction à chaque fois que l'heure réel arrive à l'heure choisie par l'utilisateur

    L'heure choisi par l'utilisateur est saisi dans le Textbox9.text pour les heures et le Textbox10.text pour les minutes

    - J'active le timer pour récupéré mon heure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub RibbonForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Démarrage de l'heure en temps réel
            Timer1.Enabled = True
        End Sub
    - Je récupère l'heure de l'utilisateur au bon format dans le label89.text
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox10_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox10.TextChanged
     
            'récupération de l'heure au bon format
            Label89.Text = TextBox9.Text + ":" + TextBox10.Text + ":00"
     
        End Sub
    - Je récupère et compare l'heure de l'ordi par rapport à l'heure utilisateur dans le Toolstrplabel4.text
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            Timer1.Start()
     
            'Affiche la date
            ToolStripLabel2.Text = Date.Now.ToString("dd-MM-yyyy")
     
            'Affiche l'heure
            ToolStripLabel4.Text = TimeOfDay
     
            'Résulat Pompe1
            If Label89.Text = Toolstriplabel4.Text Then
     
            Label99.Text = Label78.Text - TextBox7.Text
            Label10.Text = Label99.Text + " ml"
     
            'Calcul pourcentage
            Label112.Text = (100 * Val(Label99.Text)) / Val(TextBox1.Text)
            VerticalProgressBar1.Value = Label112.Text
            Label117.Text = Label112.Text + " %"
            Label78.Text = Label99.Text   ' -> Quand j'ajoute cette ligne le calcul n'est plus cohérent
     
            End If
     
        End Sub
    Je m'arrache les cheveux à essayer de comprendre pourquoi le calcul s’exécute mais me donne des résultats incohérent (exemple pour 4000ml de base avec 200ml de dosage, le résultat me donne 2000ml au lieu de 3800.

    Ce qui est étrange c'est que si je n'utilise pas la nation de l'heure et que je place directement les calcul dans un événement Button_Click tout fonctionne à merveille. j'ai bien 200ml en moins à chaque clique sur le bouton...

    Auriez-vous une idée ou une solution à mon problème je ne sais plus quoi faire
    Merci à tous ceux qui pourront m'aider

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne suis pas sûr de bien comprendre, mais le Timer ne tient pas vraiment compte de l'heure. Sa tâche est de déclencher un événement à toutes les x millisecondes (Timer.Interval).

    La mise à jour de tes données doit probablement être faite dans la procédure d'événement liée au déclenchement de l'événement à l'expiration du délai.

    Également, il ne faut JAMAIS utiliser Val si le séparateur décimal est la virgule. Tu peux utiliser Cdbl ou les méthodes Double.Parse, Double.tryparse, pour convertir en Double; ou CSng, Single.parse ou single.tryparse pour convertir en single.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Mon bon Jeremie ,utiliser des Labels et Textboxes comme variables est un VERITABLEMENT UN DESASTRE en programmation !!!

    1/les Labels, ToolStripLabels servent à l'affichage des variables RESULTATS
    2/les Textboxes servent à recuperer les donnees entrees de l'user dans les variables DONNEES

    3/ Tous les calculs se font avec les variables
    En suivant ce principe voici ton composant Alarme equipe :
    1/d'un DateTimePicker qui "pique" la date (y compris ses minutes et seconds
    2/ d'un bouton qui "arme" l'alarmeuser :
    - en settant la variable Alarm sur la date du DateTimePicker
    - il ajoute les minutes eventuelles saisie dans txtMinutes(TextBox)
    - demarre le Timer

    3/d'un Tmer:
    - verifie à chaque Tick si Date.Now dépasse la variable Alarme de plus 1 seconde
    - si oui, le MsgBox s'affiche (reveillez-vous) et à l'appui du OK ,la lymphe du ProgressBar s'exoule comme voulu...
    code vb.net exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    Public Class Form1
        Private Alarm As DateTime = DateTime.MaxValue ' No alarm
        Private QtyBase As Integer = 0
        Private QtyDose As Integer = 0
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ProgressBar1.Maximum = 100
            ProgressBar1.Minimum = 0
            ProgressBar1.Value = 0
     
            txtQtyBase.Text = 4000
            txtQtyDose.Text = 2000
     
        End Sub
        Private resultat As Integer = 0
        Private Sub SetAlarmButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetAlarmButton.Click
     
            Alarm = DateTimePicker1.Value
     
            resultat = Integer.Parse(txtMinutes.Text, resultat)
            If resultat <= 0 Then Return
            Alarm = Alarm.AddMinutes(resultat)
            Timer1.Enabled = True
            ToolStripStatusLabel2.Text = Alarm.TimeOfDay.ToString
        End Sub
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
     
            ToolStripStatusLabel1.Text = DateTime.Now.TimeOfDay.ToString()
            ToolStripStatusLabel2.Text = Alarm.TimeOfDay.ToString
            ' Check to see whether we're within 1 second of the alarm
            Dim seconds As Single = DateTime.Now.Subtract(Alarm).TotalSeconds
            If (seconds >= 0) And (seconds <= 1) Then
                Alarm = DateTime.MaxValue ' Show alarm only once
                MsgBox("Wake up!")
                QtyBase = Integer.Parse(txtQtyBase.Text)
                QtyDose = Integer.Parse(txtQtyDose.Text)
                Dim pct As Integer = CInt(100 * QtyDose / QtyBase)
                ProgressBar1.Value = pct
     
                ToolStripStatusLabel3.Text = pct.ToString
                Timer1.Enabled = False
            End If
     
     
        End Sub
     
    End Class
    bon code........

  4. #4
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Bonjour MABROUKI,

    Tout d'abord merci pour la qualité de ta réponse j'étais encore loin de la chose. Effectivement il m'es conseillé de réalisé des calculs avec des VARIABLES numérique et non des labels ou textbox...

    Merci pour ce bel exemple qui va m'aider à progresser et essayer de réaliser la boucle d'événement que je souhaite réaliser chaque jours aux heures défini. Je vais essayer d'adapter ton exemple sur mon cas tout à l'heure en rentrant de mon travail.

    J'essaye de comprendre ton code et je m'interroge sur :

    - Le choix de l'heure pour le user ce fait via le DateTimePicker1.value -> je dois donc mettre le DateTimePicker1 au format = Time pour que le user puisse saisir les heures souhaitées ?

    - Je souhaites que la progressbar baisse chaque jours aux heures souhaitées du dosage saisie donc je vais enlever ProgressBar1.Value = 0 dans Form_Load sinon je ne verrais pas l'évolution de jours en jours. Dans ton exemple je pense qu'il faut que je créé une variable Private QtyReste As Integer = 0 pour en déduire la valeur restante de chaque jours et repartir sur cette dernière valeur à chaque tour.

    - Le ToolStripStatusLabel2.Text récupère l'heure souhaité par le user sous la forme "00:00:00" ?

    - Est-ce que avec DateTimePicker1.Value la date est comprise auquel cas mon programme ne fonctionnera que sur 1 jour ? (alors que je souhaite que le programme s’exécute tous les jours)

    - Je ne comprend pas l’intérêt du txtMinutes, quel en serai l'utilisation ?


    Merci infiniment pour ta réponse, pour être francs après de nombreuses recherche et essaye je n'avais pas réussi à avancer et m'étais résigné à arrêter mon petit programme.

  5. #5
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Re bonjour,

    Voici mon code adapté à ce que je souhaite (enfin à peu près) mais sa avance car les calculs fonctionnent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Public Class RibbonForm1 
     
        Private Alarm1 As DateTime = DateTime.MaxValue ' No alarm
        Private QtyBase1 As Integer = 0
        Private QtyDose1 As Integer = 0
        Private QtyReste1 As Integer = 0
     
     Private Sub RibbonForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Timer1.Start()
            VerticalProgressBar1.Maximum = 100
            VerticalProgressBar1.Minimum = 0
     
        End Sub
     
    Private Sub SetAlarmButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetAlarmButton1.Click
     
            Alarm1 = DateTimePicker1.Value
            Timer1.Enabled = True
            LBL_HrsUser1.Text = Alarm1.TimeOfDay.ToString
     
        End Sub
     
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            'Heure du PC
            TLS_HrsPC.Text = DateTime.Now.TimeOfDay.ToString()
     
            'Label heures saisi par user
            LBL_HrsUser1.Text = Alarm1.TimeOfDay.ToString
     
            'Déclenchement de l'évenement
            Dim seconds As Single = DateTime.Now.Subtract(Alarm1).TotalSeconds
     
            If (seconds >= 0) And (seconds <= 1) Then
     
                Alarm1 = DateTime.MaxValue ' Show alarm only once
                QtyBase1 = Integer.Parse(txtQtyBase1.Text)
                QtyDose1 = Integer.Parse(txtQtyDose1.Text)
                QtyReste1 = Integer.Parse(LBL_Reste1.Text)
     
                'Calcul du reste de ml dans la base
                Dim reste1 As Integer = CInt(QtyBase1 - QtyDose1)
                LBL_Reste1.Text = reste1.ToString
     
                'Affichage reste ml pour user
                Label10.Text = reste1.ToString + " ml"
     
                'Calcul du % restant
                Dim pct1 As Integer = CInt(100 * reste1 / QtyBase1)
                VerticalProgressBar1.Value = pct1
                LBLresultat_prc1.Text = pct1.ToString
     
                'Affichage % pour user
                Label12.Text = pct1.ToString + " %"
     
                Timer1.Enabled = False
     
                'Continue le calcul de l'heure
                Timer1.Enabled = True
     
            End If
        End Sub
     
        Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
     
            'récupère l'heure choisi par user
            Alarm1 = DateTimePicker1.Value
     
        End Sub

    Voici les problèmes rencontrés :

    - L'heure qui s'affiche dans TLS_HrsPC.Text m'affiche je pense les millisecondes derrières les secondes, je n'arrive pas à formater la variable pour n'avoir que "hh:mm:ss"

    - Je n'arrive pas faire une boucle pour que lors du prochain passage horaire choisi le programme se relance avec les dernières valeurs calculer.

    Exemple :

    aujourd'hui à 19:00:00
    base1 = 4000ml
    dose1 = 200ml
    reste = 3800 ml
    % = 95%

    demain à 19:00:00
    base1 = 3800ml
    dose1 toujours 200ml
    reste = 3600ml
    % = 90%

    ect...

    - Lors de la fermeture du programme et de la réouverture l'heure saisie dans DateTimePicker n'est pas sauvegardé, sa me remet tous le temps l'heure du PC actuel (j'ai essayer de sauvegarder la valeur dans PropertyBinding mais cela ne conserve pas la dernière valeur saisie par l'user.

    - Lors des événement le LBL_HrsUser1.Text = 23:59:59... alors que j'aimerai qu'il garde la valeur saisie par l'user pour le passage du lendemain

    Auriez-vous des pistes pour me guider vers ce que je souhaites ??

    Vous remerciant par avance
    Jérémy

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Re....
    Le choix de l'heure pour le user ce fait via le DateTimePicker1.value -> je dois donc mettre le DateTimePicker1 au format = Time pour que le user puisse saisir les heures souhaitées ?
    Si l'Alarme est reglée au Jour le Jour ,il faut utiliser Date.Now....
    Attention le type DateTime fournit une Date qui comprends la date,les heure,les minutes,les secondes et les millisecondes !!!

    -
    Je souhaites que la progressbar baisse chaque jours aux heures souhaitées du dosage saisie donc je vais enlever ProgressBar1.Value = 0 dans Form_Load sinon je ne verrais pas l'évolution de jours en jours. Dans ton exemple je pense qu'il faut que je créé une variable Private QtyReste As Integer = 0 pour en déduire la valeur restante de chaque jours et repartir sur cette dernière valeur à chaque tour.
    Surement ....L'ecoulement dans une ProgressBar ne peut etre inversé.Il faudrait un control Gauge reversible !!!

    -
    Est-ce que avec DateTimePicker1.Value la date est comprise auquel cas mon programme ne fonctionnera que sur 1 jour ? (alors que je souhaite que le programme s’exécute tous les jours)
    Avec DateTmePicker ou Date.Now la Date est incluse !!!
    Une DUREE =date arrivee-date depart !!!....Une heure sans date ne veut rien dire !!!

    CODE .vb REVU AVEC Date.Now

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
     
    Public Class Form1
        Private Alarm As DateTime = DateTime.MaxValue ' No alarm
        Private QtyBase As Integer = 0
        Private QtyDose As Integer = 0
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            lblNow.Text = Date.Now.ToLongTimeString
            ToolStripStatusLabel2.ForeColor = Color.Red
            ProgressBar1.Maximum = 100
            ProgressBar1.Minimum = 0
            ProgressBar1.Value = 100
     
            txtQtyBase.Text = 4000
            txtQtyDose.Text = 2000
        End Sub
     
        Private Sub SetAlarmButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetAlarmButton.Click
     
            'CODE REVU AVEC Date.Now
     
     
            Alarm = Date.Now  'date du jour
            Alarm = Alarm.AddHours(Heures)
            Alarm = Alarm.AddMinutes(Minutes)
     
            Timer1.Enabled = True
     
        End Sub
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            ToolStripStatusLabel1.Text = DateTime.Now.ToShortDateString + "->" + Date.Now.ToLongTimeString
     
            ToolStripStatusLabel2.Text = Alarm.ToShortDateString + "->" + Alarm.ToLongTimeString
     
            ' Check to see whether we're within 1 second of the alarm
     
     
            Dim seconds As Single = DateTime.Now.Subtract(Alarm).TotalSeconds
            If (seconds >= 0) And (seconds <= 1) Then
                Alarm = DateTime.MaxValue ' Show alarm only once
                MsgBox("Wake up!")
                QtyBase = Integer.Parse(txtQtyBase.Text)
                QtyDose = Integer.Parse(txtQtyDose.Text)
                Dim pct As Integer = CInt(100 * QtyDose / QtyBase)
     
                ProgressBar1.Value = pct
                ToolStripStatusLabel3.Text = pct.ToString
                Timer1.Enabled = False
            End If
     
        End Sub
        'PROP RAJOUTEES POUR FACILITER LA SAISIE
        'MINUTES ET HEURES
        Public ReadOnly Property Minutes As Integer
            Get
                Dim m As Integer = Integer.Parse(txtMinutes.Text)
                If m < 0 Then
                    m = 0
                End If
                Return m
            End Get
        End Property
     
        Public ReadOnly Property Heures As Integer
            Get
                Dim h As Integer = Integer.Parse(txtHeures.Text)
                If h < 0 Then
                    h = 0
                End If
                Return h
            End Get
        End Property
     
     
    End Class
    bon code...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Si j'ai bien compris tu veux décrémenter un bar graph en fonction d'une consommation de liquide Dison toute le minute.

    J'ai disons pour l'exemple un litre de liquide et je consomme 0.200 litre par sconde.
    Je vais définir un pas acceptable par le bar graph sur un échelle de 1000 1/1000.
    1000/200 1L/0.200L.

    Une fois que je connais le pas de décrémentation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VerticalProgressBar1.Value -=pasDeDecrementation
    Comme la mentionné Clément,que je salut au passage, l'imprécision du timer vas t'oblige à réduire le temps d'échantillonnage et de vérifier te temps écoulé en fonction de la date système.

  8. #8
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonsoir,
    Si j'ai bien compris tu veux décrémenter un bar graph en fonction d'une consommation de liquide Dison toute le minute.

    J'ai disons pour l'exemple un litre de liquide et je consomme 0.200 litre par sconde.
    Je vais définir un pas acceptable par le bar graph sur un échelle de 1000 1/1000.
    1000/200 1L/0.200L.

    Une fois que je connais le pas de décrémentation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VerticalProgressBar1.Value -=pasDeDecrementation
    Comme la mentionné Clément,que je salut au passage, l'imprécision du timer vas t'oblige à réduire le temps d'échantillonnage et de vérifier te temps écoulé en fonction de la date système.

    Non je souhaites réduire la valeur d'une progressbar chaque jours aux horaires choisi par un utilisateur selon sa base et son dosage mais j'étais loin de m'imaginer que ce soit autant compliqué !!!

    Exemple :

    aujourd'hui à 19:00:00
    base1 = 4000ml
    dose1 = 200ml
    reste = 3800 ml
    % = 95%

    demain à 19:00:00
    base1 = 3800ml
    dose1 toujours 200ml
    reste = 3600ml
    % = 90%

    Après demain à 19:00:00
    base1 = 3600ml
    dose1 toujours 200ml
    reste = 3400ml
    % = 85%

    Ect...

    Mais pour le moment rien ne fonctionne

  9. #9
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Bonjour MABROUKI,

    Merci d'avoir pris le temps de m'adapter un code. J'ai ré-adapté ton exemple sur le mien et pour le coup plus rien ne fonctionne

    J'ai donc remplacé le DateTimerTick par 2 txtbox heures et minutes

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
        Private Sub RibbonForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Timer1.Start()
            lblNow.Text = Date.Now.ToLongTimeString
     
            VerticalProgressBar1.Maximum = 100
            VerticalProgressBar1.Minimum = 0
     
        End Sub
     
        Private Sub SetAlarmButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetAlarmButton1.Click
     
     
            Alarm1 = Date.Now  'date du jour
     
            Timer1.Enabled = True
     
        End Sub
     
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
     
            LblStatut1.Text = DateTime.Now.ToShortDateString + "->" + Date.Now.ToLongTimeString  'Message String.format can be used
            LblStatut2.Text = Alarm1.ToShortDateString + "->" + Alarm1.ToLongTimeString  'Message String.format can be used
     
     
            'Déclenchement de l'évenement
            Dim seconds As Single = DateTime.Now.Subtract(Alarm1).TotalSeconds
     
            If (seconds >= 0) And (seconds <= 1) Then
     
                Alarm1 = DateTime.MaxValue ' Show alarm only once
                QtyBase1 = Integer.Parse(txtQtyBase1.Text)
                QtyDose1 = Integer.Parse(txtQtyDose1.Text)
                QtyReste1 = Integer.Parse(LBL_Reste1.Text)
     
                'Calcul du reste de ml dans la base
                Dim reste1 As Integer = CInt(QtyBase1 - QtyDose1)
                LBL_Reste1.Text = reste1.ToString
     
                'Affichage reste ml pour user
                Label10.Text = reste1.ToString + " ml"
     
                'Calcul du % restant
                Dim pct1 As Integer = CInt(100 * reste1 / QtyBase1)
                VerticalProgressBar1.Value = pct1
                LBLresultat_prc1.Text = pct1.ToString
     
                'Affichage % pour user
                Label12.Text = pct1.ToString + "%"
     
                'Continue le calcul de l'heure
                Timer1.Enabled = True
     
            End If
     
        End Sub
     
    'MINUTES ET HEURES SAISI USER
        Public ReadOnly Property Minutes As Integer
            Get
                Dim m As Integer = Integer.Parse(txtMinutes1.Text)
                If m < 0 Then
                    m = 0
                End If
                Return m
            End Get
        End Property
     
        Public ReadOnly Property Heures As Integer
            Get
                Dim h As Integer = Integer.Parse(txtHeures1.Text)
                If h < 0 Then
                    h = 0
                End If
                Return h
            End Get
        End Property

    - Je ne comprend pas à quoi sert ton lblNow.Text puis-ce qu'il intervient nul part ?

    - Ton ToolStripStatusLabel1.Text me donne la date et l'heure d'aujourd'hui et ton ToolStripStatusLabel2.Text me donne 31/12/999 -> 23:59:59 et reste static

    - les variables "m" et "h" qui corresponde à l'heure choisi par le User n'intervienne pas dans le Timer_Tick ??

    J'ai vraiment du mal à comprendre ton dernier exemple.

    Merci par avance,
    Jérémy

  10. #10
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    J'essaie d'avancer tant bien que mal, j'ai réussi à avancer un peu sur ce que je souhaites faire mais il me manque juste une soustraction qui me fait foirer le calcul et je ne comprend pas pk...

    Mon code actuel n'est pas très propre sur certain point mais je coince..

    Pour rappel voici ce que j'aimerai faire :

    Exemple :

    aujourd'hui à 19:00:00
    base1 = 4000ml
    dose1 = 200ml
    reste1 = 3800 ml
    % = 95%

    demain à 19:00:00
    base1 = 3800ml
    dose1 toujours 200ml
    reste1 = 3600ml
    % = 90%

    Après demain à 19:00:00
    base1 = 3600ml
    dose1 toujours 200ml
    reste1 = 3400ml
    % = 85%
    Ect...

    Voici mon code actuel graçe à MABROUKI:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Public Class RibbonForm1 
     
        Private Alarm1 As DateTime = DateTime.MaxValue ' No alarm
        Private QtyBase1 As Integer = 0
        Private QtyDose1 As Integer = 0
        Private QtyReste1 As Integer = 0
     
     
      Private Sub RibbonForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Timer1.Start()
     
            VerticalProgressBar1.Maximum = 100
            VerticalProgressBar1.Minimum = 0
     
        End Sub
     
     
        Private Sub SetAlarmButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetAlarmButton1.Click
     
     
            Alarm1 = Date.Now  'date du jour
            Timer1.Enabled = True
     
        End Sub
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            'Je récupère l'heure du PC
            LblStatut1.Text = Date.Now.ToLongTimeString
     
            'Je récupère l'heure au bon format de dosage souhaité via 2 txtbox
            LblStatut2.Text = txtHeures1.Text + ":" + txtMinutes1.Text + ":00"
     
            'Déclenchement de l'évenement
            If LblStatut2.Text = LblStatut1.Text Then
     
                Alarm1 = DateTime.MaxValue ' Show alarm only once
                QtyBase1 = Integer.Parse(txtQtyBase1.Text)
                QtyDose1 = Integer.Parse(txtQtyDose1.Text)
                QtyReste1 = Integer.Parse(LBL_Reste1.Text)
     
                'Calcul du reste de ml dans la base
                Dim reste1 As Integer = CInt(QtyBase1 - QtyDose1)
                LBL_Reste1.Text = reste1.ToString
     
                'Affichage reste ml pour user
                Label10.Text = reste1.ToString + " ml"
     
                'Calcul du % restant
                Dim pct1 As Integer = CInt(100 * reste1 / QtyBase1)
                VerticalProgressBar1.Value = pct1
                LBLresultat_prc1.Text = pct1.ToString
     
                'Affichage % pour user
                Label12.Text = pct1.ToString + "%"
     
    ' Pour la boucle du lendemain  il faudrai que txtQtybase1.text = LBL_Reste1.Text à la fin de cet évément pour que le calcul redémrarre le lendemin avec bases1 - dose1 mais je n'y arrive pas le calcul me donne un résultat incohérent
     
            End If
     
        End Sub

    QtyBase1 est la valeur qu'il doit baisser de jours en jours pour que la logique fonctionne et que les soustractions ce déduise de jours en jours.

    J'ai essayé de changer la valeur de QtyBase1 par des évenements button avec perform.click ou bien un autre timer ou bien une progressbar mais le calcul me donne toujours un résultat incohérent..

    Je suis bloqué de chez bloqué car plus di'dée

    Est-ce que vous comprenez ce que j'essai de mettre en place et comment débloqué la situation ??

    Vous remerciant par avance,
    Très cordialement,

Discussions similaires

  1. pb avec progressbar
    Par kivoch dans le forum Composants VCL
    Réponses: 5
    Dernier message: 07/12/2005, 14h59
  2. Temps de calcul avec deux écrans
    Par Shaga dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/11/2005, 09h24
  3. Faire du calcul avec la valeur d'un élément/attribut
    Par camboui dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 03/11/2005, 16h10
  4. Copier fichier avec progressbar
    Par marcus333 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 13/09/2005, 20h55
  5. Réponses: 2
    Dernier message: 22/03/2004, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo