none
timer RRS feed

  • Question

  • bonjour

    je suis entrain de créer un appli pour visionneuse de photo elle fonctionne bien par contre je voudrais démarrer un diaporama avec changement de vue toute le s3secondes je bloque complètement j’ai mis l'intervalle de mon timer à 1000 mais  je ne sais pas faire le enclenchement  du changement de vue merci de m'aider  à écrire ce code

    meilleurs voeux pour 2016

    vendredi 1 janvier 2016 14:44

Réponses

  • Après avoir regardé les détails de ImageList, il semble que la limite de taille est 16x16... parfait pour des icones mais vraiment pas la solution optimale pour des images...

    Donc on remplace ImageList par List(of bitmap)...

    Public Class Form1
        Private _booTacheEnCours As Boolean = False
        Private unTimer As System.Timers.Timer
        Private DiapoNumber As Integer = 1
        'Liste des types d'image
        Private ExtensionsFichiersImages() As String = {".gif", ".GIF", ".jpg", ".JPG", ".bmp", ".png", ".tiff", ".TIFF"}
        Private ListeDiapos As List(Of Bitmap) 'ImageList
    
        Private Sub ChargementImagesDepuisDossier(ByRef CheminDossier As String)
            'Création de la liste d'image ImageList
            ListeDiapos = New List(Of Bitmap) ' New ImageList
            'Récupération des fichiers depuis le dossier en question
            Dim FichiersDansDir() As String = IO.Directory.GetFiles(CheminDossier)
            Try
                'Pour chaque fichier on vérifie la validité de l'extension et on le charge dans l'ImageList
                For Each FichierImage As String In FichiersDansDir
                    Dim ExtensionFichier As String = Path.GetExtension(FichierImage)
                    If ExtensionsFichiersImages.Contains(ExtensionFichier) = True Then
                        Dim diapo As System.Drawing.Image = bitmap.FromFile(FichierImage)
                        ListeDiapos.Add(diapo) 'ListeDiapos.Images.Add(diapo)
                    End If
                Next
            Catch ex As Exception
                Debug.Print("Erreur " & ex.Message & " type: " & ex.ToString)
            End Try
    
    
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Lancer le timer pour lancer la visionneuse
            If _booTacheEnCours = False Then
                unTimer = New System.Timers.Timer()
                unTimer.Interval = 500
    
                ' Déclaration de l'événement déclenché à chaque fin du timer
                AddHandler unTimer.Elapsed, AddressOf OnTimedEvent
                unTimer.AutoReset = True
                ' Démarrage
                unTimer.Enabled = True
                Button1.Text = "Arrêter visionneuse"
                _booTacheEnCours = True
            Else
                unTimer.Stop()
                Button1.Text = "Démarrer visionneuse"
                _booTacheEnCours = False
    
            End If
        End Sub
        Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs)
            Try
                'On affiche l'heure de l'événement
                'Select Case DiapoNumber
                '    Case 1
                '        PictureBox1.Image = My.Resources.Pic1
                '    Case 2
                '        PictureBox1.Image = My.Resources.Pic2
                '    Case 3
                '        PictureBox1.Image = My.Resources.Pic3
                'End Select
    
                If DiapoNumber < ListeDiapos.Count - 1 Then
                    PictureBox1.Image = ListeDiapos(DiapoNumber) 'ListeDiapos.Images(DiapoNumber)
                    DiapoNumber += 1
                Else
                    PictureBox1.Image = ListeDiapos(0) 'ListeDiapos.Images(0)
                    DiapoNumber = 1
                End If
    
            Catch ex As Exception
                Debug.Print("Exception:" & ex.Message)
            End Try
    
        End Sub


    Cyrille Precetti



    dimanche 3 janvier 2016 15:02

Toutes les réponses

  • Voila du code pour cela (500ms j'ai pas la patience :)) Il faut mettre l'affichage dans l'event déclenché par le Timer.

    Public Class Form1
        Private _booTacheEnCours As Boolean = False
        Private unTimer As System.Timers.Timer
        Private DiapoNumber As Integer = 1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Lancer le timer pour lancer la visionneuse
            If _booTacheEnCours = False Then
                unTimer = New System.Timers.Timer()
                unTimer.Interval = 500
    
                ' Déclaration de l'événement déclenché à chaque fin du timer
                AddHandler unTimer.Elapsed, AddressOf OnTimedEvent
    
                unTimer.AutoReset = True
    
                ' Démarrage
                unTimer.Enabled = True
                Button1.Text = "Arrêter visionneuse"
                _booTacheEnCours = True
            Else
                unTimer.Stop()
                Button1.Text = "Démarrer visionneuse"
                _booTacheEnCours = False
    
            End If
        End Sub
        Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs)
            Try
                'On affiche l'heure de l'événement
                Select Case DiapoNumber
                    Case 1
                        PictureBox1.Image = My.Resources.Pic1
                    Case 2
                        PictureBox1.Image = My.Resources.Pic2
                    Case 3
                        PictureBox1.Image = My.Resources.Pic3
                End Select
                If DiapoNumber < 3 Then
                    DiapoNumber += 1
                Else
                    DiapoNumber = 1
                End If
    
            Catch ex As Exception
                Debug.Print("Exception:" & ex.Message)
            End Try
    
    
        End Sub

    Les Pic1 à Pic3 sont dans les ressources de la solution...plus simple pour l'exemple.

    Voila ce que cela donne:

    Note que la PictureBox est en mode StretchImage....

    Bonne Année de codage 2016


    Cyrille Precetti


    vendredi 1 janvier 2016 15:50
  • merci beaucoup j'utilise un  opendialog

    cela est il compatible $merci de me dire

    vendredi 1 janvier 2016 17:18
  • Voulez-vous dire OpenFileDialog?

    Cela serai pour demander quel fichier à l'utilisateur. Il faudrait charger toutes les images dans une ImageList puis les afficher dans un PictureBox.

    ImageList1.Images.Add(Image.FromFile(NomDuFichierImage))
    Pouvez vous poser le code que vous voulez utiliser pour charger ces images?

    Cyrille Precetti

    vendredi 1 janvier 2016 17:25
  • bonjour

    je vous  communique le code complet de ma visionneuse qui fonctionne très bien manuellement à la quelle je voudras ajouter le diaporama le chemin du fichier est  sur mon bureau il porterais le nom "mes photo" si on peut l’automatiser

    je vais tester votre réponse

    Public Class Form1
        Private Sub clearButton_Click() Handles clearButton.Click
            ' Clear the picture.
            PictureBox1.Image = Nothing
        End Sub
    
        Private Sub backgroundButton_Click() Handles diapoButton.Click
            ' Show the color dialog box. If the user clicks OK, change the
            ' PictureBox control's background to the color the user chose.
            If ColorDialog1.ShowDialog() = DialogResult.OK Then
                PictureBox1.BackColor = ColorDialog1.Color
            End If
        End Sub
    
        Private Sub closeButton_Click() Handles closeButton.Click
            ' Close the form.
            Close()
        End Sub
    
    
        Private Sub showButton_Click(sender As Object, e As System.EventArgs) Handles showButton.Click
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
                PictureBox1.Load(OpenFileDialog1.FileName)
            End If
    
    
        End Sub
        Private Sub CheckBox1_CheckedChanged() Handles CheckBox1.CheckedChanged
            ' If the user selects the Stretch check box, change 
            ' the PictureBox's SizeMode property to "Stretch". If the user 
            ' clears the check box, change it to "Normal".
            If CheckBox1.Checked Then
                PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
            Else
                PictureBox1.SizeMode = PictureBoxSizeMode.Normal
            End If
        End Sub
    
    End Class
    

    merci d'avance

    samedi 2 janvier 2016 07:46
  • pouvez vous préciser ce que vous dites à propos des fichiers images; "Mes Photos" est-il un dossier sur votre bureau?

    Si c'est le cas je suggère de faire un chargement des images dans un contrôle ImageList, puis de laisser le Timer déclencher l'affichage dans la picbox. Voici le code qui fonctionne avec imageList, à vous de mettre le dialog pour récupérer le nom du dossier ou mettre le nom.

    Imports System.IO
    
    Public Class Form1
        Private _booTacheEnCours As Boolean = False
        Private unTimer As System.Timers.Timer
        Private DiapoNumber As Integer = 1
        'Liste des types d'image
        Private ExtensionsFichiersImages() As String = {".gif", ".GIF", ".jpg", ".JPG", ".bmp", ".png", ".tiff", ".TIFF"}
        Private ListeDiapos As ImageList
    
        Private Sub ChargementImagesDepuisDossier(ByRef CheminDossier As String)
            'Création de la liste d'image ImageList
            ListeDiapos = New ImageList
            'Récupération des fichiers depuis le dossier en question
            Dim FichiersDansDir() As String = IO.Directory.GetFiles(CheminDossier)
            Try
                'Pour chaque fichier on vérifie la validité de l'extension et on le charge dans l'ImageList
                For Each FichierImage As String In FichiersDansDir
                    Dim ExtensionFichier As String = Path.GetExtension(FichierImage)
                    If ExtensionsFichiersImages.Contains(ExtensionFichier) = True Then
                        Dim diapo As System.Drawing.Image = Image.FromFile(FichierImage)
                        ListeDiapos.Images.Add(diapo)
                    End If
                Next
            Catch ex As Exception
                Debug.Print("Erreur " & ex.Message & " type: " & ex.ToString)
            End Try
    
    
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Lancer le timer pour lancer la visionneuse
            If _booTacheEnCours = False Then
                unTimer = New System.Timers.Timer()
                unTimer.Interval = 500
    
                ' Déclaration de l'événement déclenché à chaque fin du timer
                AddHandler unTimer.Elapsed, AddressOf OnTimedEvent
                unTimer.AutoReset = True
                ' Démarrage
                unTimer.Enabled = True
                Button1.Text = "Arrêter visionneuse"
                _booTacheEnCours = True
            Else
                unTimer.Stop()
                Button1.Text = "Démarrer visionneuse"
                _booTacheEnCours = False
    
            End If
        End Sub
        Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs)
            Try
                'On affiche l'heure de l'événement
                'Select Case DiapoNumber
                '    Case 1
                '        PictureBox1.Image = My.Resources.Pic1
                '    Case 2
                '        PictureBox1.Image = My.Resources.Pic2
                '    Case 3
                '        PictureBox1.Image = My.Resources.Pic3
                'End Select
    
                If DiapoNumber < ListeDiapos.Images.Count - 1 Then
                    PictureBox1.Image = ListeDiapos.Images(DiapoNumber)
                    DiapoNumber += 1
                Else
                    PictureBox1.Image = ListeDiapos.Images(1)
                    DiapoNumber = 1
                End If
    
            Catch ex As Exception
                Debug.Print("Exception:" & ex.Message)
            End Try
    
    
        End Sub
       'Au lancement le dossier contenant les diapos est chargé
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
                   Call ChargementImagesDepuisDossier("C:\Users\Cyrille\Desktop\Diapos")
        End Sub


    Cyrille Precetti


    Marquez comme solution si cela convient - Happy New Year
    samedi 2 janvier 2016 09:03
  • un grand merci

    cela fonctionne bien par contre les images sont flou j’ai bien mis le picturebox en strechimage et j’ai teste les autres possibilités seule en mode normal je peu voir mes photos hales trop petites

     comment faire là je sais pas fraie

    voicice que je vois
    samedi 2 janvier 2016 10:12
  • Après avoir regardé les détails de ImageList, il semble que la limite de taille est 16x16... parfait pour des icones mais vraiment pas la solution optimale pour des images...

    Donc on remplace ImageList par List(of bitmap)...

    Public Class Form1
        Private _booTacheEnCours As Boolean = False
        Private unTimer As System.Timers.Timer
        Private DiapoNumber As Integer = 1
        'Liste des types d'image
        Private ExtensionsFichiersImages() As String = {".gif", ".GIF", ".jpg", ".JPG", ".bmp", ".png", ".tiff", ".TIFF"}
        Private ListeDiapos As List(Of Bitmap) 'ImageList
    
        Private Sub ChargementImagesDepuisDossier(ByRef CheminDossier As String)
            'Création de la liste d'image ImageList
            ListeDiapos = New List(Of Bitmap) ' New ImageList
            'Récupération des fichiers depuis le dossier en question
            Dim FichiersDansDir() As String = IO.Directory.GetFiles(CheminDossier)
            Try
                'Pour chaque fichier on vérifie la validité de l'extension et on le charge dans l'ImageList
                For Each FichierImage As String In FichiersDansDir
                    Dim ExtensionFichier As String = Path.GetExtension(FichierImage)
                    If ExtensionsFichiersImages.Contains(ExtensionFichier) = True Then
                        Dim diapo As System.Drawing.Image = bitmap.FromFile(FichierImage)
                        ListeDiapos.Add(diapo) 'ListeDiapos.Images.Add(diapo)
                    End If
                Next
            Catch ex As Exception
                Debug.Print("Erreur " & ex.Message & " type: " & ex.ToString)
            End Try
    
    
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Lancer le timer pour lancer la visionneuse
            If _booTacheEnCours = False Then
                unTimer = New System.Timers.Timer()
                unTimer.Interval = 500
    
                ' Déclaration de l'événement déclenché à chaque fin du timer
                AddHandler unTimer.Elapsed, AddressOf OnTimedEvent
                unTimer.AutoReset = True
                ' Démarrage
                unTimer.Enabled = True
                Button1.Text = "Arrêter visionneuse"
                _booTacheEnCours = True
            Else
                unTimer.Stop()
                Button1.Text = "Démarrer visionneuse"
                _booTacheEnCours = False
    
            End If
        End Sub
        Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs)
            Try
                'On affiche l'heure de l'événement
                'Select Case DiapoNumber
                '    Case 1
                '        PictureBox1.Image = My.Resources.Pic1
                '    Case 2
                '        PictureBox1.Image = My.Resources.Pic2
                '    Case 3
                '        PictureBox1.Image = My.Resources.Pic3
                'End Select
    
                If DiapoNumber < ListeDiapos.Count - 1 Then
                    PictureBox1.Image = ListeDiapos(DiapoNumber) 'ListeDiapos.Images(DiapoNumber)
                    DiapoNumber += 1
                Else
                    PictureBox1.Image = ListeDiapos(0) 'ListeDiapos.Images(0)
                    DiapoNumber = 1
                End If
    
            Catch ex As Exception
                Debug.Print("Exception:" & ex.Message)
            End Try
    
        End Sub


    Cyrille Precetti



    dimanche 3 janvier 2016 15:02
  • Un très grand merci si vous desirez les diapo cela sera un plaisir de  vous les transmettre

    dimanche 3 janvier 2016 16:43