VB .NET -  Criando um Show de Slides (revisitado)

  Hoje vou apresentar uma aplicação que exibe imagens de uma pasta selecionada ao estilo show de slides usando a linguagem VB .NET.


Hoje temos uma aplicação bem simples que mostra como usar os recursos da linguagem VB .NET para criar uma exibição das imagens de uma pasta selecionada ao estilo show de slides.

A aplicação usa o controle Timer para realizar a temporização e controlar a velocidade de exibição das imagens no controle PictureBox.

Nesta aplicação você vai aprender a usar os seguintes controles:

  • Timer - ativar/desativar e definir a propriedade Interval;

  • PictureBox - Exibir imagens

  • MenuStrip - Definir menus

  • TrackBar - Controlar

O programa utiliza a classe Slides.vb para definir os métodos que controlam a exibição das imagens no formulário;.

Recursos Usados:

Criando o projeto no VS Community 2017

Abra no VS community 2017 e no menu File clique em New Project;

A seguir selecione o template Visual Basic -> Windows -> Windows Forms Application e informe o nome SlideShow e clique em OK;

Agora abra o formulário Form1.vb e inclua os seguintes controles no formulário:

Disponha os controles conforme o leiaute da figura abaixo:

Definindo o código do formulário

No formulário frmMain.vb do projeto inclua o código abaixo:

Public Class frmMain
    Private WithEvents Slides As New Slides
    Private Sub BrowseToolStripMenuItem_Click(ByVal sender As System.Object, _
                                              ByVal e As System.EventArgs) _
                                              Handles BrowseToolStripMenuItem.Click

        Dim Browse As New FolderBrowserDialog
        Browse.Description = "Selecione a pasta de imagens"

        If Browse.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
            Try
                Slides.Procurar(Browse.SelectedPath)
                If Slides.TotalImages >= 0 Then
                    TrackBar.Value = 0
                    TrackBar.Minimum = 0
                    TrackBar.Maximum = CInt(Slides.TotalImages)
                End If
                Slides.Executar() ' executa o show de slides
                Me.Text = "Show de Slides - " & Browse.SelectedPath
            Catch ex As Exception
                ' Não faz nada se der um erro
            End Try
        End If
    End Sub
    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, _
                                            ByVal e As System.EventArgs) _
                                            Handles ExitToolStripMenuItem.Click
        Dim Response As MsgBoxResult
        Response = MsgBox("Deseja encerrar o programa ?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Show de Slides")
        If Response = MsgBoxResult.Yes Then
            End
        End If
    End Sub
    Private Sub PlayPauseToolStripMenuItem_Click(ByVal sender As System.Object, _
                                                 ByVal e As System.EventArgs) _
                                                 Handles PlayPauseToolStripMenuItem.Click
        If Slides.Executar Then
            If Slides.EmPausa Then
                Slides.Continuar()
            Else
                Slides.Pausar()
            End If
        Else
            Slides.Executar()
        End If
    End Sub
    Private Sub StopToolStripMenuItem_Click(ByVal sender As System.Object, _
                                            ByVal e As System.EventArgs) _
                                            Handles StopToolStripMenuItem.Click
        Slides.Parar()
    End Sub
    Private Sub SlowToolStripMenuItem_Click(ByVal sender As System.Object, _
                                            ByVal e As System.EventArgs) _
                                            Handles SlowToolStripMenuItem.Click
        Slides.Velocidade = 3000
    End Sub
    Private Sub MediumToolStripMenuItem_Click(ByVal sender As System.Object, _
                                              ByVal e As System.EventArgs) _
                                              Handles MediumToolStripMenuItem.Click
        Slides.Velocidade = 1500
    End Sub
    Private Sub FastToolStripMenuItem_Click(ByVal sender As System.Object, _
                                            ByVal e As System.EventArgs) _
                                            Handles FastToolStripMenuItem.Click
        Slides.Velocidade = 500
    End Sub
    Private Sub RepeatToolStripMenuItem_Click(ByVal sender As System.Object, _
                                              ByVal e As System.EventArgs) _
                                              Handles RepeatToolStripMenuItem.Click
        Slides.RepetirExecucao = RepeatToolStripMenuItem.Checked
    End Sub
    Private Sub TrackBar_Scroll(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs) Handles TrackBar.Scroll
        Slides.Mover(TrackBar.Value)
    End Sub
    Private Sub frmMain_Load(ByVal sender As System.Object, _
                             ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "Show de Slides"
    End Sub
    Private Sub Slides_Slide(ByVal Filename As String) Handles Slides.Slide
        Visualizador.ImageLocation = Filename
        TrackBar.Value = Slides.ImagemAtual
    End Sub
End Class

Definindo o código da classe Slides do projeto

Vamos criar uma classe chamada Slides.vb em nosso projeto via menu Project -> Add Class.

Inclua o código abaixo nesta classe:

Public Class Slides
    ' Private Members
    Private WithEvents timerExibir As New Timer
    Private ListaImagens As New ArrayList
    Private ProcurarSucesso As Boolean
    Private Intervalo As Integer = 1500
    Private TotalImagens As Integer = 0
    Private ItemAtual As Integer = 0
    Private Executando As Boolean
    Private Pausado As Boolean
    Private Repetir As Boolean
    ' métodos privados
    Private Function Arquivos(ByRef Path As String,
                           ByRef Filtro As String) As ArrayList

        Dim TodosArquivos As New ArrayList
        Dim dirInfo As New IO.DirectoryInfo(Path)

        If dirInfo.Exists Then ' verifica se o caminho existe
            Dim dirArquivos As IO.FileInfo() = dirInfo.GetFiles("*.*")
            ' Percorre o caminho para os arquivos pelo filtro
            For Each fileinfo As IO.FileInfo In dirArquivos
                If InStr(Filtro, fileinfo.Extension, CompareMethod.Text) > 0 Then
                    TodosArquivos.Add(fileinfo.FullName) ' Adicionar no ArrayList
                End If
            Next
        End If

        Return TodosArquivos

    End Function
    ' Construtor
    Public Sub New()
        timerExibir.Enabled = False
        timerExibir.Interval = Intervalo
    End Sub
    ' métodos públicos
    Public Function Procurar(ByVal Path As String) As Boolean
        ListaImagens.Clear() ' limpa lista de imagens
        ListaImagens = Arquivos(Path, ".jpg.png.gif.bmp.jpeg")
        TotalImagens = ListaImagens.Count - 1 ' total das imagens
        If TotalImagens > 0 Then 'imagens encontradas
            ProcurarSucesso = True
            Return True
        Else
            Return False ' sem imagens
        End If
    End Function
    Public Function Executar() As Boolean
        If ProcurarSucesso Then
            Executando = True
            timerExibir.Enabled = True
            If Pausado Then
                Me.Pausar()
            Else
                Pausado = False
            End If
        End If
    End Function
    Public Function Parar() As Boolean
        If ProcurarSucesso Then
            timerExibir.Enabled = False
            ItemAtual = 0
            Executando = False
            Pausado = False
        End If
        Return False
    End Function
    Public Function Pausar() As Boolean
        If ProcurarSucesso Then
            timerExibir.Enabled = False
            Pausado = Not timerExibir.Enabled
            Return Pausado
        End If
        Return False
    End Function
    Public Function Continuar() As Boolean
        If ProcurarSucesso And Pausado Then
            timerExibir.Enabled = True
            Pausado = Not timerExibir.Enabled
            Return Pausado
        End If
        Return False
    End Function
    Public Function Mover(ByVal Index As Integer) As Boolean
        If ProcurarSucesso Then
            If Index < ListaImagens.Count Then
                ItemAtual = Index
                If Executando Then
                    Me.Executar()
                End If
            End If
        End If
    End Function
    ' Public Properties
    Public Property RepetirExecucao() As Boolean
        Get
            Return Repetir
        End Get
        Set(ByVal Value As Boolean)
            If Repetir <> Value Then
                Repetir = Value
            End If
        End Set
    End Property
    Public Property Velocidade() As Integer
        Get
            Return Intervalo
        End Get
        Set(ByVal Value As Integer)
            If Value >= 500 And Value < 3000 And Value <> Intervalo Then
                Intervalo = Value
                timerExibir.Interval = Intervalo
            End If
        End Set
    End Property
    Public ReadOnly Property TotalImages() As Integer
        Get
            Return TotalImagens
        End Get
    End Property
    Public ReadOnly Property ImagemAtual() As Integer
        Get
            Return ItemAtual
        End Get
    End Property
    Public ReadOnly Property EmExecucao() As Boolean
        Get
            Return Executando
        End Get
    End Property
    Public ReadOnly Property EmPausa() As Boolean
        Get
            Return Pausado
        End Get
    End Property
    Private Sub TimerExibir_Tick(ByVal sender As Object,
                              ByVal e As System.EventArgs) _
                              Handles timerExibir.Tick

        If ProcurarSucesso And Executando Then
            If ItemAtual < ListaImagens.Count Then
                RaiseEvent Slide(CStr(ListaImagens.Item(ItemAtual)))
                ItemAtual += 1
            Else
                If Repetir Then
                    ItemAtual = 0 ' Reseta se Repetir
                End If
            End If
        End If
    End Sub
    ' Evento
    Public Event Slide(ByVal Filename As String)
End Class

Essa classe contém os métodos usados para gerenciar as imagens exibindo-as como slides.

Executando o projeto teremos o resultado a seguir:

Pegue o projeto completo aqui:  VBNET_SLIDESHOW.zip

Se dissermos que temos comunhão com ele (Jesus), e andarmos em trevas, mentimos, e não praticamos a verdade.
Mas, se andarmos na luz, como ele na luz está, temos comunhão uns com os outros, e o sangue de Jesus Cristo, seu Filho, nos purifica de todo o pecado.

1 João 1:6,7

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti