none
Faire une pause dans une animation RRS feed

  • Question

  • Bonjour à tous

    Dans une animation composée de 7 images,

    je voudrais faire afficher une image plus longtemps que les autres,

    en l’occurrence la première image.

    Sur ma Form j'ai un PictureBox, un Timer avec interval à 250 et un RadioButton

    qui démarre l'animation.

    Mon animation se fait par lecture en boucle des images avec le code suivant

    If image = 6 then

    animationStep = -1

    ElseIf image = 0 then

    animationStep = 1

    End IF

    Je voudrais que l'image 0 reste affichée plus longtemps

    J'ai essayé avec second Timer "Pause" en faisant

    Sub Pause_Iick

    Pause.Interval = 750

    Pause Enable = True

    End Sub

    puis

    ElseIf image = 0 Then

    animationStep = 1

    Pause.Start()

    End If

    Au pas à pas pause est reconnu ainsi que  pause start mais n'agit pas

    Puis j'ai essayé

    ElseIf image =0 Then

    animationStep =1

    Threading.Thread.Sleep(750)

    End IF

    La pause se fait bien mais entre l'affichage image1 et image0

    alors que je voudrais la pause entre l'affichage image0 et image1

    Si quelqu'un avait une solution elle serait la bien venue.

    Merci

    Cdlt


    PARIS Michel
    dimanche 1 mai 2011 18:01

Réponses

  • Bonsoir Michel,
    Ben alors faut tout mettre dans le timer, voici un code :
    dim tempus as byte ' global
    
    sub lanceLeTimer()
     tempus = 0
     timer.enabled=true
    end sub
    
    sub Timer1...
     tempus = tempus + 1
     select case tempus
      case 1, 2, 3: affiche_image 0
      case 4 : affiche_image 1
      case 5 : affiche_image 2
      case 6 : affiche_image 3
      case 7 : affiche_image 4
      case 8 : affiche_image 5
      case 9 
       affiche_image 6
       tempus = 0
     end select
     My.Application.DoEvents()
    end sub ' timer1
    
    sub procedureOUobjetStopTimer()
     timer1.enabled = false
    end sub
    
    
    Je l'ai fait de tête, alors il peut y avoir quelques imperfections, c'est l'instruciton
    My.Application.DoEvents
    
    
    Qui permet de rendre la mains aux autres objets pendant que le timer tourne, afin si besoin de l'arrêter avec un objet (bouton), etc...
    Ça devrait je pense tourner rond ainsi, cordialement.
     
     
     
     
     
     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 5 mai 2011 19:10

Toutes les réponses

  • Bonsoir Michel,

    Peut être :

    sub visu_image()
     timer1.enabled = false 
     ' affiche image 0
     System.Threading.Thread.Sleep(750)
     timer1.enabled = true
    end sub ' visu_image
    
    sub timer1(...
     ' affiche images 1 à 6
    end sub ' timer
    
    

    Si les images ne défilent qu'une fois c'est bon, sinon il faut (entre autre), faire une boucle avec le principe sus-cité, on peut aussi laisser la main à l'application si jamais ça ne s'affichait pas, par :

    my.application.doEvents()
    
    

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse TroxsaEditor mardi 3 mai 2011 13:15
    dimanche 1 mai 2011 19:40
  • Bonjour

     

    Je suis du même avie que EhJoe c'est une tres bonne idée ! :)

     

    A bientot


    Cordialement,
    Xavier
    Alias Troxsa My M@iL
    mardi 3 mai 2011 13:16
    Auteur de réponse
  • Bonjour, Michel,

    Avez-vous testé la solution d’EhJoe ? Merci pour tenir la communauté informée sur la suite de vos démarches.

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    jeudi 5 mai 2011 07:50
  • Bonsoir à tous

    Excusez le retard mais je travaille en déplacement

    et il n'y avait pas de WIFI à mon hôtel (ça existe encore)

    J'ai bien testé la solution de Joe elle fonctionne comme il le précise

    que si les images ne sont affichées qu'une seule fois.

    Dans mon  cas particulier, mon animation doit tourner en boucle

    tant que le RadioButton est checké.

    Merci à tous

     


    PARIS Michel
    jeudi 5 mai 2011 17:31
  • Bonsoir Michel,
    Ben alors faut tout mettre dans le timer, voici un code :
    dim tempus as byte ' global
    
    sub lanceLeTimer()
     tempus = 0
     timer.enabled=true
    end sub
    
    sub Timer1...
     tempus = tempus + 1
     select case tempus
      case 1, 2, 3: affiche_image 0
      case 4 : affiche_image 1
      case 5 : affiche_image 2
      case 6 : affiche_image 3
      case 7 : affiche_image 4
      case 8 : affiche_image 5
      case 9 
       affiche_image 6
       tempus = 0
     end select
     My.Application.DoEvents()
    end sub ' timer1
    
    sub procedureOUobjetStopTimer()
     timer1.enabled = false
    end sub
    
    
    Je l'ai fait de tête, alors il peut y avoir quelques imperfections, c'est l'instruciton
    My.Application.DoEvents
    
    
    Qui permet de rendre la mains aux autres objets pendant que le timer tourne, afin si besoin de l'arrêter avec un objet (bouton), etc...
    Ça devrait je pense tourner rond ainsi, cordialement.
     
     
     
     
     
     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 5 mai 2011 19:10
  • Bonsoir Joe

    Merci pour ton bout de code

    DE mon coté j'étai parti dans la même direction

    Quand au zip je n'y comprend rien non plus car j'ai déjà 

    zipé des fichiers codes pour les envoyer et ça fonctionnait

    je verrai plus tard

    A plus


    PARIS Michel
    vendredi 6 mai 2011 17:24
  • Bonjour à tous

    Ayant fini mon code grâce aux conseils de EhJoe

    j'en publie un extrait qui pourrait servir à d'autres

    Sur un formulaire mettre 2RradioButton , "Davis et Cesar"

    deux PictureBox et un Timer "tmrAnimation"

    Animations basées sur VB.Samples.GdiAnimation

     

    Option Explicit On
    Imports System.Drawing.Drawing2D
    
    Public Class Form1
    
      ' Initialise première animation
    
      Const DavisTimerInterval As Integer = 250 ' En millisecondes
      Protected davisImages(10) As Image ' Nombre Images
      Protected currentImage As Integer = 0 ' Image de Départ
      Protected animationStep As Integer = 1 ' Image suivante
    
        ' Initialise deuxième animation
    
      Const CesarTimerInterval As Integer = 250
      Protected cesarImage(10) As Image
      Protected currentCesarImage As Integer = 0
      Protected animationCesarStep As Integer = 1
    
       Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        ' Remplit le tableau d'image pour Davis.
    
        davisImages(0) = My.Resources.davis1
        davisImages(1) = My.Resources.davis1
        davisImages(2) = My.Resources.davis1
        davisImages(3) = My.Resources.davis11
        davisImages(4) = My.Resources.davis12
        davisImages(5) = My.Resources.davis13
        davisImages(6) = My.Resources.davis14
        davisImages(7) = My.Resources.davis15
        davisImages(8) = My.Resources.davis16
        davisImages(9) = My.Resources.davis16
    
        ' Rempli le tableau d'image pour Cesar
    
        cesarImage(0) = My.Resources.mississipi
        cesarImage(1) = My.Resources.mississipi
        cesarImage(2) = My.Resources.mississipi
        cesarImage(3) = My.Resources.cesar1
        cesarImage(4) = My.Resources.cesar2
        cesarImage(5) = My.Resources.cesar3
        cesarImage(6) = My.Resources.cesar4
        cesarImage(7) = My.Resources.cesar5
        cesarImage(8) = My.Resources.cesar6
        cesarImage(9) = My.Resources.cesar6
    
       
      End Sub
    
      ' Evènement RadioButton
    
      Private Sub RadioButtons_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
     Handles Davis.CheckedChanged,Cesar.CheckedChanged 
        Dim rb As RadioButton = CType(sender, RadioButton)
        If rb.Checked Then
          Uncheck(rb)
        End If
        tmrAnimation.Start()
        If Davis.Checked Then
          tmrAnimation.Interval = DavisTimerInterval
            ElseIf Cesar.Checked Then
          tmrAnimation.Interval = CesarTimerInterval
           End If
          End Sub
    
        Protected Overridable Sub TimerOnTick(ByVal obj As Object, ByVal ea As EventArgs) Handles tmrAnimation.Tick
    
        ' Animation de Davis
    
        If Davis.Checked Then
    
          ' Obtient l'objet Graphics exposé par le formulaire.
          Dim grfx As Graphics = CreateGraphics()
          grfx.Dispose()
          PictureBox1.BackgroundImage = davisImages(currentImage)
    
          ' Lit les images en boucle.
    
    
          If currentCesarImage > (0) Then
    
           ' Force la fin de l'animation
    
            currentCesarImage += animationCesarStep
            animationCesarStep = -1
            PictureBox3.BackgroundImage = cesarImage(currentCesarImage)
    
            If currentCesarImage = (0) Then
              animationCesarStep = 0
            End If
    
          currentImage += animationStep
          If currentImage = 9 Then
            animationStep = -1
    
          ElseIf currentImage = 0 Then
            animationStep = 1
          End If
    
      
          ' Animation de Cesar
    
        ElseIf Cesar.Checked Then
          Dim grfx As Graphics = CreateGraphics()
          PictureBox3.BackgroundImage = cesarImage(currentCesarImage)
          If currentImage > (0) then
            currentImage += animationStep
            animationStep = -1
            PictureBox1.BackgroundImage = davisImages(currentImage)
            If currentImage = (0) Then
              animationStep = 0
            End If
           
      End Sub
    
     End Class
    

     


    PARIS Michel
    samedi 7 mai 2011 11:48