Meilleur auteur de réponses
Faire une pause dans une animation

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
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'instrucitonMy.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- Proposé comme réponse Ciprian Duduiala vendredi 6 mai 2011 05:56
- Marqué comme réponse paris michel vendredi 6 mai 2011 17:24
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
-
-
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
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.
-
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 -
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'instrucitonMy.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- Proposé comme réponse Ciprian Duduiala vendredi 6 mai 2011 05:56
- Marqué comme réponse 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