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

Windows Forms Discussion :

Faire défiler des images toutes les secondes


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 34
    Points
    34
    Par défaut Faire défiler des images toutes les secondes
    Bonjour
    J'aimerai savoir comment faire défiler des image.
    Je m'explique, lors d'un clic sur un bouton j'aimerai que diférentes images défilent toutes les secondes .
    Je pense qu'il faut utiliser un timer ainsi qu'une imagelist mais je rencontre un probleme avec ce dernier car je n'arive pas a restituer les images qu'il contient a un picturebox.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    il faut effectivement un timer et une liste d'images (pas une ImageList, ça ne sert qu'à certains trucs bien particulier).

    à chaque évènement Tick du timer, tu prends l'image suivante de la liste et tu la mets dans la picturebox

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 34
    Points
    34
    Par défaut
    mais comment définir la liste d'image?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    en créant un List(Of Image) (dans le code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private images As List(Of Image)

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 34
    Points
    34
    Par défaut
    et comment définir les images dans cette liste?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images.Add(Image.FromFile("uneImage.jpg")
    un petit tour par ici te permettrait de répondre toi-même à pas mal de questions

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 34
    Points
    34
    Par défaut
    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
    Public Class Form1
     
        Private images As List(Of Image)
     
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Timer1.Start()
            Timer1.Interval = 500
     
        End Sub
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
        End Sub
     
        Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
            images.Add(Image.FromFile("Image1.jpg"))
            images.Add(Image.FromFile("Image2.jpg"))
            images.Add(Image.FromFile("Image3.jpg"))
        End Sub
    End Class
    Comment faire ensuite pour qu'a chaque tick l'image suivante s'affiche?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par babylone_59 Voir le message
    Comment faire ensuite pour qu'a chaque tick l'image suivante s'affiche?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private indexImage As Integer = -1
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            ' on avance d'une image
            indexImage = indexImage + 1
            ' si on est au bout de la liste, on revient à la première image
            If indexImage >= images.Count Then
                indexImage = 0
            End If
            pictureBox1.Image = images(i)
        End Sub
    Et aussi, n'oublie pas d'initialiser la liste (avec New)

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 34
    Points
    34
    Par défaut
    Pour initialiser les images j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images.Add(Image.FromFile("Image1.jpg"))
    mais c le chemin pour acceder a l'image que je dois metre a la place de image1.jpg ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par babylone_59 Voir le message
    mais c le chemin pour acceder a l'image que je dois metre a la place de image1.jpg ?
    oui

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 34
    Points
    34
    Par défaut
    Voici mon code mais sa ne fonctionne pas. Aurais je oublié quelque chose?

    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
    Public Class Form1
     
     
        Private images As List(Of Image)
        Private indexImage As Integer = -1
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Timer1.Start()
            Timer1.Interval = 500
     
        End Sub
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            Dim i As Integer
            ' on avance d'une image
            indexImage = indexImage + 1
            ' si on est au bout de la liste, on revient à la première image
            If indexImage >= images.Count Then
                indexImage = 0
            End If
            pictureBox1.Image = images(i)
        End Sub
     
        Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
            images.Add(Image.FromFile("C:\Documents and Settings\Julien\Mes documents\Mes images\Boule_billard\boule1.bmp"))
            images.Add(Image.FromFile("C:\Documents and Settings\Julien\Mes documents\Mes images\Boule_billard\boule8.bmp"))
        End Sub
    End Class

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par babylone_59 Voir le message
    Voici mon code mais sa ne fonctionne pas.
    Qu'est-ce qui ne fonctionne pas ? Ca ne compile pas ? Il y a une erreur à l'exécution ? sois plus précis...

    Comme je te l'ai dit plus haut, il faut que tu initialises images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images = New List(Of Image)

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 34
    Points
    34
    Par défaut
    La référence d'objet n'est pas définie à une instance d'un objet pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If indexImage >= images.Count Then

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par babylone_59 Voir le message
    La référence d'objet n'est pas définie à une instance d'un objet pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If indexImage >= images.Count Then
    ok, donc c'est bien ce que je disais : c'est parce que tu n'as pas initialisé images

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Image qui défile
    Bonjour à tous !

    Visiblement je suis en train de faire un sacré déterrage mais je vais rester dans le thème du topic !

    Mon but est de créer un petit jeu qui consiste à cliquer sur une image qui défile sur l'écran : l'image entre par le côté gauche de l'écran et ressort par le côté droit.

    J'avais dans l'idée d'utiliser un timer et une multitude de pictureBox qui chacune à son tour afficherai la forme à chaque événement du timer.
    Avant de me lancer dans ce travail de "bourrin", j'aimerai savoir si il n'existe pas déjà quelque chose qui permette de faire ça ou si il quelqu'un aurait une solution plus propre donnant un résultat plus fluide...

    Une forme c'est bien, plusieurs c'est mieux... Le but est d'arriver à une suite de formes qui défilent les unes après les autres pour faire un petit exercice (cliquer uniquement sur les carrés rouges par exemple)

    Voilà voilà j'espère que mon explication est assez claire et que quelqu'un saura me répondre !

    Merci d'avance

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le plus fluide n'est pas forcément le plus simple à coder
    faire un bufferedgraphics
    sur un thread le mettre à jour (déssiner dessus images et autres)
    appeler .invalidate sur l'objet contenant le dessin
    et dans l'event paint faire lebufferedgraphics.render

    en plus simple mais peut etre moins performant il y a le timer et le doublebuffer à true
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Merci
    Oula.. que de mots nouveaux pour moi... Mais merci beaucoup ! En fouinant un peu je finirai par comprendre ! Maintenant que je sais quoi chercher...

    Bonne soirée

  18. #18
    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
    Tu dois utiliser un timer et gerer la "vitesse" ou "velocity" de tes pictureboxes qui defilent

    Voici un un exemple :
    -place une 1ere rangee PicBox horizontale en haut de ton form,regulierement disposes ...mettons 4 ((ou ce que tu veux).....
    -Assigne au BackColor de chaque PicBox de cette 1ere range , mettons la couleur rouge:RED

    -place une 2ere rangee de PicBox horizontale en dessous de la 1ere ...regulierement disposes ...mettons 4 ((ou ce que tu veux).....
    -Assigne au BackColor de chaque PictBox de cette 2eme range , mettons la couleur bleue:BLUE

    -Idem pour la 3eme,4eme rangees s'il en est...
    Ainsi chaque rangee sera identifie par sa couleur BackColor .Cette couleur sera stocke dans le champ "fourre-tout" Tag de chaque PicBox,qui permettra à notre programme exemple d'identier les picbox appartenant à la meme rangee pour les faire defiler ensemble....

    -rajoute un timer...
    A l'utilisation:
    - un click sur picbox demarre l'animation de la rangee entiere en la faisant defiler à droite ecran et reapparaitre à gauche...
    - un autre click soit sur un picbox de la rangee animee ou une autre rangee ,stoppe l'animation
    Un bon compromis peut etre fait entre le reglage de l'intervalle du timer et de la "velocity' ou vitesse de progression....

    code .vb exemple du form:
    Code vb.net : 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
    79
    80
    81
    Public Class frmPicturesAnimes
        'liste des picbox =>contient toutes les rangees
        Private Pictures As New List(Of PictureBox)
     
         'vitesse de defilement
        Private VelocityX As Integer = 5
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Me.ResizeRedraw = True
            Me.AutoScroll = True
            Me.DoubleBuffered = True
            AddPictures()
            Timer1.Interval = 10
        End Sub
     
        Private Sub AddPictures()
            For Each ctrl As Control In Me.Controls
                If TypeOf ctrl Is PictureBox Then
                    Dim itemPic As PictureBox = CType(ctrl, PictureBox)
                    itemPic.Tag = itemPic.BackColor
                    Pictures.Add(itemPic)
                End If
            Next
        End Sub
     
        'liste des picbox  =>contient  la rangee cliquee
        Private PicturesClicked As New List(Of PictureBox)
        Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick,
            PictureBox2.MouseClick, PictureBox3.MouseClick, PictureBox4.MouseClick,
            PictureBox5.MouseClick, PictureBox6.MouseClick, PictureBox8.MouseClick,
            PictureBox9.MouseClick, PictureBox10.MouseClick
     
            Dim tagColor As Object = Nothing
            tagColor = CType(sender, PictureBox).Tag
            PicturesClicked.Clear()
            For Each itemPic As PictureBox In Pictures
                If itemPic.Tag = tagColor Then
                    PicturesClicked.Add(itemPic)
                End If
            Next
            Timer1.Enabled = Not Timer1.Enabled
            Me.Text = CType(sender, PictureBox).Name + " ," + tagColor.ToString
     
        End Sub
     
        Private flag As Boolean = True
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            'DEFILEMENT ÀVANT (DROITE)
            For Each itemPic As PictureBox In PicturesClicked
                itemPic.Left += VelocityX
            Next
     
            'RE-APPARITON A GAUCHE 
            Dim pic As PictureBox = PicturesClicked(PicturesClicked.Count - 1)
            If pic.Left > Me.Right Then ' si dernier pic a disparu à droite 
                'on les replace au bord gauche  du form...
                For Each item As PictureBox In PicturesClicked
                    item.Left -= Me.Width
                Next
            End If
     
        End Sub
     
        Private Sub frmImageAnimes_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
            Pictures.Clear()
     
            For Each ctrl As Control In Me.Controls
                If TypeOf ctrl Is PictureBox Then
                    Dim itemPic As PictureBox = CType(ctrl, PictureBox)
                    itemPic.Tag = itemPic.BackColor
                    Pictures.Add(itemPic)
                End If
            Next
        End Sub
     
    End Class
    Ce code simple utilisant des picbox(cela aurait pu etre aussi bien des labels ou des boutons auxquels on aurait affecte un image à leur prop BackgroundImage)
    n'est pas le plus efficient comme dit par Pol63 ...
    Des animations plus fluides utilisent des bitmaps appelees "sprites" , et le double buffering mais au prix de beaucoup plus d'effort surtout pour gerer le positionnement par code des bitmaps....travail fastidieux...!!!
    bon code....

Discussions similaires

  1. Comment faire défiler des images comme sur le site suivant
    Par tidus_6_9_2 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/01/2008, 14h32
  2. [PHP-JS] Faire défiler des images
    Par mr.Yann dans le forum Langage
    Réponses: 1
    Dernier message: 19/05/2007, 21h26
  3. Faire défiler des images
    Par kabukij dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/03/2007, 15h14
  4. [PHP-JS] Comment faire défiler des images en php ?
    Par innova dans le forum Langage
    Réponses: 4
    Dernier message: 19/11/2006, 12h09

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