none
Echelonner des actions avec vbe 2010 RRS feed

  • Question

  • Bonjour,

    J'ai a nouveau un soucis sous visual basic express 2010 ! J'espere que ce post n'est pas une redondance d'une question deja posée...

    Dans mon programme, je souhaiterai échelonner des actions à des temps prédéfinis. (ex : action1-pause1-action2-pause2... et ainsi de suite). Ces actions sont "le cochage" et "le décochage" de checkbox.

    Apres plusieurs recherches sur différents forums, je ne trouve pas quelques chose de concret.

    Je vous pose donc ma question : comment faire ces pauses ?

    Merci de votre aide

    cordialement

    Lunick90

    mardi 11 septembre 2012 12:51

Réponses

  • bonsoir,

    il est vrai que je me suis pas du tout exprime sur le but de creer ceci !

    grace a mon programme, je commande une carte de sortie qui alimente des lampes. J'ai deja code (et ca marche) le fait d'allumer ou d'eteindre manuellement chaque lampe avec une checkbox (une lampe = une checkbox) ainsi que de tout allumer ou tout eteindre d'un coup avec un bouton different pour chacune des deux actions (on voit aussi le resultat dans la checkbox). Ce que je souhaiterai, c'est de pouvoir faire une sequence allumé-eteint de ces lampes dans l'ordre que je veux (et cet ordre sera code, donc pas de modifications possible par un autre utilisateur). Ce que je vois, c'est une sequence de 2 minutes au grand maximum !

    voila ce que j'ai fait sur un premier jet :

    v_Lamp.Item(4).v_Status = True ListLampes.SetItemCheckState(4, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(4).v_num System.Threading.Thread.Sleep(5000) v_Lamp.Item(2).v_Status = True ListLampes.SetItemCheckState(2, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(2).v_num System.Threading.Thread.Sleep(2000)

    est ce que ceci peut convenir ou faut il que je passe plutot par un Timer ?

    merci de vos reponses

    bonne soiree

    cordialement

    Lunick

    Bonjour,

    Je viens de prendre un petit peu de mon temps pour vous faire un exemple d'utilisation.

    Je n'ai pas trouvé le temps de commenter le code :/

    Si vous avez besoin d'explication, n'hésitez pas à revenir.

    Voici le lien ==> VBProj 2010

    Est-ce que c'est ce que vous souhaitiez faire ???


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !



    • Modifié Lyamine jeudi 13 septembre 2012 08:25
    • Marqué comme réponse Lunick jeudi 13 septembre 2012 14:15
    jeudi 13 septembre 2012 08:07

Toutes les réponses

  • Bonjour,

    Avez-vous regardés du coté System.Threading.Thread.Sleep(<temps ms>)


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mardi 11 septembre 2012 12:56
  • Bonsoir Lunick,

    ' cochage ou décochage
    System.Threading.Thread.Sleep(temps_1 en millisecondes)
    ' décochage ou cochage
    System.Threading.Thread.Sleep(temps_2 en millisecondes)
    

    Le problème néanmoins est que ce n'est pas synchronisé, ça va bloquer l'exécution du code, tandis que si tu utilisais un Timer (bien qu'un peu plus compliqué), tu aurais la continuité du programme si tu as besoin qu'en même temps le programme fasse autre chose...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mardi 11 septembre 2012 21:28
  • Boonjour,

    Merci de vos reponses.
    Dans le cas d'un Timer, quelle est l'astuce pour s'en servir, car dans mes recherches je n'arrive pas à comprendre comment il se code ! il faut d'abord le déclarer, ca c'est bon, mais après c'est la ou je bloque ! Je n'arrive pas a voir comment faire pour le demarrer avec mon button et ensuite lui dire que toutes les x ms (les espaces temps entre chaque actions est different, sinon ce ne serait pas drole !!) il doit faire cocher ou decocher les checkbox. c'est la ou je vous demande a nouveau un peu d'aide !

    Merci de vos réponses

    Cordialement

    Lunick90

    mercredi 12 septembre 2012 05:42
  • Bonjour Lunick,

    Voici le code à coller avec les objets indiqués en entête.

    '
    ' checkbox à choix temporisé
    Option Explicit On ' OBJETS : form1 + timer1 + checkbox1 = 3
    Public Class Form1
      Dim temps As Integer = 4
      Dim avance As Integer = 0
    
      Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = False 'stop
        Timer1.Interval = 500 ' 0,5 sec
        CheckBox1.BackColor = Color.Green
      End Sub
    
      Sub CheckBox1_Click(sender As Object, e As System.EventArgs) Handles CheckBox1.Click
        If Timer1.Enabled = True Then
          Select Case CheckBox1.CheckState
            Case 0 : CheckBox1.CheckState = 1
            Case 1 : CheckBox1.CheckState = 0
          End Select
          Exit Sub
        End If
        CheckBox1.BackColor = Color.Red
        avance = 0
        Timer1.Enabled = True ' démarre timer
      End Sub
    
      Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        avance = avance + 1
        If avance = temps Then
          Timer1.Enabled = False ' arrête timer
          CheckBox1.BackColor = Color.Green
        End If
      End Sub
    
    End Class

    Si tu es satisfait de la réponse tu peux donner un point en cliquant dans cette dernière sur le triangle vert en haut à gauche.

    Si tu estime que la réponse est complète tu peux cocher en bas de celle-ci "proposer comme réponse"

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 12 septembre 2012 09:09
  • bonjour,

    merci de votre aide...

    Dans ce qu'a mis EhJoe, j'ai compris l'ensemble de la demarche.

    Par contre, ca ne correspond pas totalement, a priori, a ce que je cherche a faire ; je souhaiterai que lorsque je clique sur un button, je puisse cocher checkbox1, puis un temps1 apres, cocher checkbox2, puis un temps2 apres, decocher checkbox1, puis un temps3 apres, decocher checkbox2 et le programme se termine la!

    Est ce que le code qu'a mis EhJoe est toujours valable ? ou faut il changer certaines choses ?

    merci de vos reponse

    cordialement

    Lunick90

    mercredi 12 septembre 2012 12:38
  • Bonjour,

    tout dépend du métier de votre application.

    Le cheminement est-il toujours le même ou est-il susceptible de changer ?


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mercredi 12 septembre 2012 12:52
  • bonjour,

    le cheminement comme vous dites est le meme. je programme d'une sorte et restera ainsi. Si des changements surviennent, ils seront minimes, c'est a dire, changer la durée entre deux actions.

    qu'entendez vous par "métier de 'application" ?

    merci

    cordialement

    Lunick

    mercredi 12 septembre 2012 14:04
  • Bonjour,

    Et pendant que ces opérations se passent on ne veux pas que l'utilisateur puisse manipuler le formulaire ? Si oui, on reviendrait à la suggestion faite précédemment avec Thread.Sleep (bien que ce soit effectivement inhabituel, généralement on veut plutôt mettre à jour le plus vite possible plutôt que laisser l'utlisateur voir l'interface être modifiée peu à peu, peut-être si on comprenait le besoin de départ, pourquoi l'utilisateur a t'il besoin de voir ces changements les uns après les autres ?).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 12 septembre 2012 14:58
    Modérateur
  • bonjour,

    le cheminement comme vous dites est le meme. je programme d'une sorte et restera ainsi. Si des changements surviennent, ils seront minimes, c'est a dire, changer la durée entre deux actions.

    qu'entendez vous par "métier de 'application" ?

    merci

    cordialement

    Lunick

    Le métier est tout simplement le fonctionnement, pourquoi faire, but de l'application etc... Si vous êtes susceptible de changer le Timer, passer par le fichier de configuration pour éviter la recompilation inutile (Conseil).

    Si le traitement ne risque pas de changer, autant partir sur un système scripting avec thread.sleep tout en le lançant par un thread. Bien entendu il faudrait gérer l'appel Interthread pour changer les états de checkbox. Sinon passé par le timer.


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !



    • Modifié Lyamine mercredi 12 septembre 2012 17:00
    mercredi 12 septembre 2012 15:09
  • Bonjour,

    Comme le disent les autres intervenants ça dépend en effet du fonctionnement du programme, bien que, bloquer un programme n'est pas en soi le lpus souple, mais le plus simple...

    Ben pour le reste faudrait savoir comment ça se passe, car l'ordre indiqué permet par exemple de revenir en arrière et de changer son choix, alors les possibilité deviennent assez conséquentes dans ce cas.

    Faudrait aussi dire pourquoi il faut attendre avant de cliquer sur le suivant, car quand on sait, parfois on trouve une meilleure solution ?

    Toutefois, a priori il faut cliquer dans l'odre sur chacun, alors donc pourquoi ne pas tout valider d'un coup ?

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 12 septembre 2012 15:32
  • bonsoir,

    il est vrai que je me suis pas du tout exprime sur le but de creer ceci !

    grace a mon programme, je commande une carte de sortie qui alimente des lampes. J'ai deja code (et ca marche) le fait d'allumer ou d'eteindre manuellement chaque lampe avec une checkbox (une lampe = une checkbox) ainsi que de tout allumer ou tout eteindre d'un coup avec un bouton different pour chacune des deux actions (on voit aussi le resultat dans la checkbox). Ce que je souhaiterai, c'est de pouvoir faire une sequence allumé-eteint de ces lampes dans l'ordre que je veux (et cet ordre sera code, donc pas de modifications possible par un autre utilisateur). Ce que je vois, c'est une sequence de 2 minutes au grand maximum !

    voila ce que j'ai fait sur un premier jet :

    v_Lamp.Item(4).v_Status = True ListLampes.SetItemCheckState(4, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(4).v_num System.Threading.Thread.Sleep(5000) v_Lamp.Item(2).v_Status = True ListLampes.SetItemCheckState(2, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(2).v_num System.Threading.Thread.Sleep(2000)

    est ce que ceci peut convenir ou faut il que je passe plutot par un Timer ?

    merci de vos reponses

    bonne soiree

    cordialement

    Lunick

    mercredi 12 septembre 2012 19:54
  • bonsoir,

    il est vrai que je me suis pas du tout exprime sur le but de creer ceci !

    grace a mon programme, je commande une carte de sortie qui alimente des lampes. J'ai deja code (et ca marche) le fait d'allumer ou d'eteindre manuellement chaque lampe avec une checkbox (une lampe = une checkbox) ainsi que de tout allumer ou tout eteindre d'un coup avec un bouton different pour chacune des deux actions (on voit aussi le resultat dans la checkbox). Ce que je souhaiterai, c'est de pouvoir faire une sequence allumé-eteint de ces lampes dans l'ordre que je veux (et cet ordre sera code, donc pas de modifications possible par un autre utilisateur). Ce que je vois, c'est une sequence de 2 minutes au grand maximum !

    voila ce que j'ai fait sur un premier jet :

    v_Lamp.Item(4).v_Status = True ListLampes.SetItemCheckState(4, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(4).v_num System.Threading.Thread.Sleep(5000) v_Lamp.Item(2).v_Status = True ListLampes.SetItemCheckState(2, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(2).v_num System.Threading.Thread.Sleep(2000)

    est ce que ceci peut convenir ou faut il que je passe plutot par un Timer ?

    merci de vos reponses

    bonne soiree

    cordialement

    Lunick


    Je pense que ça devrait répondre à vos besoins, ne pas oublier de décocher la précédente action etc... Maintenant il ne reste plus qu'a l’exécuter dans un Thread différent afin de ne pas bloquer le Thread principal (curseur qui devient sablier comme si l'application plantait).

    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !


    • Modifié Lyamine mercredi 12 septembre 2012 21:02
    mercredi 12 septembre 2012 21:01
  • bonjour,

    merci de vos reponses !

    ce que j'ai mis ce n'est qu'une partie du code ! il y a une sequence ou je decoche (donc j'eteinds) ensuite ou je recoche et pour finir ou tout est decoché !

    Si je dois executer dans  une thread different, que dois je y mettre ? un thread pour toute ma sequence ou un thread pour une action ?

    merci de vos reponses rapides et de vos reponses claires...

    bonne journee

    cordialement

    Lunick

    jeudi 13 septembre 2012 05:38
  • Bonjour Lunick,

    Tu écris :

    Ce que je souhaiterai, c'est de pouvoir faire une sequence allumé-eteint de ces lampes dans l'ordre que je veux...

    Ce que je vois, c'est une sequence de 2 minutes au grand maximum !

    -1-

    Concernant les objets, moult y donnent un nom personnel, certes, mais quand ton code est destiné à d'autres, il est mieux de laisser les noms d'origine. D'une part pour la compréhension, et d'autre part pour ne pas obliger ceux qui testeraient ton code à devoir donner à leur objet le nom que tu leur a donné, ce qui peut être fastidieux.

    Par exemple on peut mettre :

    Sub Command1(...) ' bouton allumant tout

    En sus, ça induit en erreur, par exemple :

    monObjet.text = "un"

    C'est quoi "monObjet" ici : un Label, Une form... La ça n'aurait pas de conséquence, c'est juste un exemple, mais la propriété ne permet pas toujours d'identifier l'objet en lisant le code si on change le nom des objets...

    - On dirait que tu utilises non pas des checkBox mais une listBoxChcked ?

    -2-

    Tu dis que ça pourrait se bloquer durant deux minutes au total.

    Je crois que c'est bien de trop, et je ne pense pas avoir vu un programme bloqué pendant deux minutes. D'une part parce que certaines actions sont effectuées automatiquement et que ça peut les bloquer, et d'autre part, parce que le système risque d'estimer que ton programme ne tourne plus et de t'envoyer "ce programme ne répond pas"...

    Bref à mon sens il faut un timer afin de rendre la main au programme (DoEvents) en cours de route.

    -3-

    Sinon, pourquoi as-tu besoin d'une temporisation si c'est toi qui manuellement allumes les lampes (via la checkBox) comme tu l'entends. De facto c'est toi le timer ici, qui décides quand allumer la prochaine lampe, alors je ne comprends pas l'utilité de la temporisation (qui n'aurait d'efficacité que si c'était automatique) ?

    -4-

    Tu fais comme tu veux concernant les objets, mais dans ton cas de figure comme dans mon exemple, allumer un bouton à deux couleur (selon l'allumage ou pas) peut s'avérer plus facile d'accès à cliquer, et visuellement plus évocateur...

    -5-

    Est-ce que le temps entre chaque lampe sera toujours le même, ou que sera-t-il (dans une hypothèse où ce serait automatique).

    -6-

    Dans mon exemple j'ai mis une couleur (rouge = inaccessible et vert = accessible), mais a priori tu n'as pas prévu ça. Alors, comment utilises-tu tes checkBox, prenant en considération le fait que si tu cliques par exemple sur la checkBox 1 tu ne sauras jamais selon ton système quand est-ce que tu pourras cliquer sur la checkBox 2 ; est-ce à comprendre que tu cliques sans cesse jusqu'à ce que soit accepté par le programme ?

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    jeudi 13 septembre 2012 06:57
  • bonsoir,

    il est vrai que je me suis pas du tout exprime sur le but de creer ceci !

    grace a mon programme, je commande une carte de sortie qui alimente des lampes. J'ai deja code (et ca marche) le fait d'allumer ou d'eteindre manuellement chaque lampe avec une checkbox (une lampe = une checkbox) ainsi que de tout allumer ou tout eteindre d'un coup avec un bouton different pour chacune des deux actions (on voit aussi le resultat dans la checkbox). Ce que je souhaiterai, c'est de pouvoir faire une sequence allumé-eteint de ces lampes dans l'ordre que je veux (et cet ordre sera code, donc pas de modifications possible par un autre utilisateur). Ce que je vois, c'est une sequence de 2 minutes au grand maximum !

    voila ce que j'ai fait sur un premier jet :

    v_Lamp.Item(4).v_Status = True ListLampes.SetItemCheckState(4, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(4).v_num System.Threading.Thread.Sleep(5000) v_Lamp.Item(2).v_Status = True ListLampes.SetItemCheckState(2, CheckState.Checked) v_Lamp.v_Value = v_Lamp.v_Value + 2 ^ v_Lamp.Item(2).v_num System.Threading.Thread.Sleep(2000)

    est ce que ceci peut convenir ou faut il que je passe plutot par un Timer ?

    merci de vos reponses

    bonne soiree

    cordialement

    Lunick

    Bonjour,

    Je viens de prendre un petit peu de mon temps pour vous faire un exemple d'utilisation.

    Je n'ai pas trouvé le temps de commenter le code :/

    Si vous avez besoin d'explication, n'hésitez pas à revenir.

    Voici le lien ==> VBProj 2010

    Est-ce que c'est ce que vous souhaitiez faire ???


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !



    • Modifié Lyamine jeudi 13 septembre 2012 08:25
    • Marqué comme réponse Lunick jeudi 13 septembre 2012 14:15
    jeudi 13 septembre 2012 08:07
  • Bonjour,

    je vais répondre au cas par cas !

    d'abord, merci de m'aider dans la résolution de mon probleme !

    pour Ehjoe :

    1. j'y penserai a l'avenir ! Apres coup, et une fois que l'on me l'a souligné, tout le monde n'est pas censé savoir ce que chacun fait !

    Après vérification, oui c'est bien une checklistbox ; ce n'est pas la meme chose que la checkbox ?

    2. d'accord...

    3. j'ai actuellement :

    - un mode manuel (coche et decoche a la souris)

    - un mode tout allumé (clique sur un bouton, et hop tout est coche et tout est allumé)

    - un mode tout eteint (clique sur un bouton et hop tout est decoche et tout est eteint) 

    -je souhaite mettre un mode automatique qui allume et eteint suivant le code que j'ai mis !

    4. d'accord

    5. donc oui un mode automatique avec les temps entre chaque lampe définit dans le programme donc la séquence est la meme entre toute les utilisations (sauf si je souhaite changer et donc je modifierai le code a ce moment la)

    6. je pense que vous n'avez pas compris mon probleme, sachant que je me suis mal exprime et que je n'utilise pas les bons termes ! par ailleur, je garde ce que vous avez repondu pour le jour ou j'aurai besoin de faire ca...

    Merci d'avoir passé du temps, et excuser moi pour les erreurs que j'ai pu faire et donc la perte de temps pour vous !

    cordialement

    Lunick

    jeudi 13 septembre 2012 12:49
  • cette fois ci, je réponds a Lyamine :

    merci d'avoir pris de votre temps pour faire ce code. Meme si il est pas commenté, je le comprend quand meme !

    C'est bien ce que je souhaite faire, vous avez pu me comprendre malgré la difficulte a saisir ce que je voulais !

    j'ai deja une question : dans votre code, vous cochez check1 puis vous le decochez avant de cochez check2. est ce qu'il est possible de laisser cocher check1 avant de cocher check2 et par exemple de decocher check1 puis check2 avant de cocher check3 ?

    merci de votre aide

    cordialement

    Lunick

    jeudi 13 septembre 2012 12:57
  • Bonjour

    Je vous propose l’architecture suivante  - comme ça les checkbox seront indépendantes:

                    Chaque checkbox sera contrôlée par un Thread qui a reçu comme paramètre  une liste avec des intervalles de temps. Apres dormir un intervalle de temps le Thread vas changer l’etat de checkbox (Check deviendra unchecked et viceversa).

    Prenons comme example 2 checkbox avec 2 Threads avec les entrées prochaines  - On commance avec tous les checkbox an etat unchecked:

      • 0, 500, 500, 500, 500, 500 (en total 2.5 secondes)
      • 1000, 1000, 500 (en total 2.5 secondes)

    Attention : A cause de l’allocation de temps de processeur, entre deux actions qui doivent être simultanées, on peut avoir une petite différence de temps   

    Les checkboxes seront (par intervalle) :

     

    Interval (MiliSecondes)

    CB1

    CB2

    0

    O

    .

    500

    .

    .

    1000

    O

    O

    1500

    .

    O

    2000

    O

    .

    2500

    .

    O

                  

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.


    • Modifié Aurel Bera jeudi 13 septembre 2012 14:00
    jeudi 13 septembre 2012 13:58
  • Oui la partie métier n'est dépendante que de vous. Il suffit d'ajouter vos pauses quand il faut etc...

    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !


    • Modifié Lyamine jeudi 13 septembre 2012 14:38
    jeudi 13 septembre 2012 14:37
  • Suite...

    CheckListBox n'est pas la même chose que CheckBox.

    Respectivement dans la première c'est une liste qui se gère comme tel avec en sus les cases à cocher.

    Dans le second cas c'est juste un objet tout seul qui gère coché ou non-coché (il me semble qu'il avait trois positions en vb6 : grisé, non-coché et coché, en vb10 je ne sais pas si les 3 position sont conservées, il en reste au moins 2 : coché et non-coché).

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    jeudi 13 septembre 2012 14:47
  • Suite 2...

    Un autre exemple :

    '
    ' checkbox à choix temporisé : Listbox + ProgressBar + OvalShap * 5
    '
    ' Y A ENCORE QUELQUES REGLAGES A FAIRE SUR PROGRESSBAR
    Option Explicit On
    Public Class Form1
      Dim coul As Byte = 0
      Dim i As Integer = 0
      Dim j As Integer = 0
      Dim eteint As Boolean = False
      Dim time2 As Byte = 0
    
    
      Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        For i = 6 To 10
          coul = i
          Call couleur()
        Next i
        eteint = 0
        Timer1.Interval = 4000
        Timer1.Enabled = False
        Timer2.Interval = 500
        Timer2.Enabled = False
        ProgressBar1.Minimum = 0
        ProgressBar1.Maximum = 6
      End Sub
    
    
      Sub couleur()
        Select Case coul
          Case 1
            OvalShape1.FillColor = Color.Yellow
          Case 2
            OvalShape2.FillColor = Color.Red
          Case 3
            OvalShape3.FillColor = Color.Lime
          Case 4
            OvalShape4.FillColor = Color.Blue
          Case 5
            OvalShape5.FillColor = Color.Brown
          Case 6
            OvalShape1.FillColor = Color.Black
          Case 7
            OvalShape2.FillColor = Color.Black
          Case 8
            OvalShape3.FillColor = Color.Black
          Case 9
            OvalShape4.FillColor = Color.Black
          Case 10
            OvalShape5.FillColor = Color.Black
        End Select
      End Sub
    
    
      Sub ListBox1_Click(sender As Object, e As System.EventArgs) Handles ListBox1.Click
        coul = False
        For i = 6 To 10 ' éteint tout
          coul = i
          Call couleur()
        Next i
        Select Case ListBox1.SelectedIndex
          Case 0 ' 1 un par un
            j = 0
            eteint = False
            ListBox1.Enabled = False
            time2 = 0
            Timer1.Enabled = True
            Timer2.Enabled = True
          Case 1 ' 2 un par un + éteindre derrière
            j = 0
            eteint = True
            ListBox1.Enabled = False
            time2 = 0
            Timer1.Enabled = True
            Timer2.Enabled = True
          Case 2 ' 3 allume tout
            For i = 1 To 5
              coul = i
              Call couleur()
            Next i
          Case Else
        End Select
      End Sub
    
    
      Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        j = j + 1
        If eteint = True And j > 1 Then
          coul = j + 4
          Call couleur()
        End If
        coul = j
        Call couleur()
        If j = 5 Then
          ListBox1.Enabled = True
          Timer1.Enabled = False
          Timer2.Enabled = False
          ProgressBar1.Value = 0
        End If
      End Sub
    
    
      Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        time2 = time2 + 1
        If time2 <= ProgressBar1.Maximum Then ProgressBar1.Value = time2
        If time2 > ProgressBar1.Maximum Then time2 = 0
      End Sub
    
    End Class
    

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    • Proposé comme réponse EhJoe samedi 15 septembre 2012 16:24
    jeudi 13 septembre 2012 15:16
  • Bonjour Lunick,

    Ayant un peu suivi le fil, cela semble en partie assez similaire à la programmation d'un automate fini  : le nombre d'ampoules et de transitions entre leurs états est fini. A un état T, il y a un nombre fini de possibilités. Indépendamment  du langage utilisé tu peux faire des recherches sur ce type de programmation, par exemple : Automate fini


    Cordialement, Jacques

    jeudi 13 septembre 2012 15:27
  • Bonjour,

    je vous remercie pour toute l'aide et votre temps que vous avez pu apporter à mon problème.

    La réponse de Lyamine (celle ou un code est à télécharger) est la bonne (meme si je me suis mal exprimé sur mon besoin).

    Cordialement

    Lunick

    samedi 15 septembre 2012 12:58