VB.NET  - Criando um exibidor de slides


Vamos criar neste artigo um exibidor de slide (slide show) usando os recursos do VB.NET.

Inicie um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET. Altere o nome do formulário padrão para frmPrincipal e inclua no formulário um controle PictureBox com o nome de - picImagem - ; um ListBox - lstImagem - ; OpenFileDialog usando o nome padrão ; 4 controles Button ; um controle TextBox com nome de - txtImagem e um controle LinkLabel  , conforme a figura abaixo: (Estou usando também dois controles GroupBox)

Agora vamos incluir o código ao evento de cada controle do formulário:

A primeira coisa a fazer é usar um imports para a classe Threading :

Imports System.threading

Obs: Para saber mais sobre Threads leia os artigos :

Defina também uma variável do tipo picturebox que será usada no formulário para exibir as imagens:

Dim pb1 As New PictureBox

O código do evento Click do botão Procurar é o seguinte :

Private Sub btnProcurar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcurar.Click

        'configura o controle OpenFileDialog
        OpenFileDialog1.Multiselect = False
        OpenFileDialog1.Filter = "Jpeg|*.jpg|Gif|*.gif|Jpeg|*.jpeg|Bitmap|*.bmp"
        OpenFileDialog1.RestoreDirectory = True
        OpenFileDialog1.Title = "Procurar"

        'se não cancelou então atribui o nome selecionado a caixa de texto
        If OpenFileDialog1.ShowDialog <> DialogResult.Cancel Then
            txtImagem.Text = OpenFileDialog1.FileName
        End If

    End Sub

No evento Click do botão - Incluir na Lista - é dado abaixo:

    Private Sub btnIncluiLista_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluiLista.Click
 
        'se há alguma informação na caixa de texto então inclui na lista senão avisa e sai
        If txtImagem.TextLength <= 0 Then
            MessageBox.Show("Selecione um arquivo...", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, 
                           MessageBoxDefaultButton.Button3)
            Exit Sub
        Else
            lstImagem.Items.Add(txtImagem.Text)
        End If
    End Sub

 

O código do botão - Iniciar Exibição dos Slides - é o seguinte :

 

Private Sub btnInciaSlides_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInciaSlides.Click

        'se há imagem no list box então inicia slides senão sai...
        If lstImagem.Items.Count = 0 Then
            MessageBox.Show("Inclua pelo menos uma imagem...", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, 
                                      MessageBoxDefaultButton.Button3)
            btnProcurar.Focus()
            Exit Sub
        Else
            'define um novo objeto formulário
            Dim frmSlide As New Form
            'configura o novo formulário 
            frmSlide.WindowState = FormWindowState.Maximized
            frmSlide.Size = New Size(20, 20)
            frmSlide.MaximizeBox = False
            frmSlide.MinimizeBox = False
            frmSlide.BackColor = Color.Black
            frmSlide.Text = "Show de slides"
            pb1.Dock = DockStyle.Fill
            pb1.BackColor = Color.Black
            pb1.Size = New Size(30, 30)
            pb1.SizeMode = PictureBoxSizeMode.StretchImage
            pb1.BorderStyle = BorderStyle.Fixed3D

            'inclui o picturebox no formulario
            frmSlide.Controls.Add(pb1)
            frmSlide.Show()
            Me.Hide()
             'define uma linha de execução 
            Dim slideLinhaExecucao As New Thread(AddressOf exibeSlides)
              'inicia a thread
            slideLinhaExecucao.Start()
        End If
    End Sub

 

 

A rotina - exibeSlides -  para iniciar a exibição dos slides em tela cheia é dada abaixo:

 

 Sub exibeSlides()
        Dim k, s As String
        Dim i, j, m As Integer
        'percorre o listbox 
        For i = 0 To lstImagem.Items.Count - 1
            'obtem o item da lista
            k = lstImagem.Items.Item(i)
            'atribui a variavel s
            s = k
            'atribui a imagem ao controle picImagem - pb1
            pb1.Image = Image.FromFile(s)
            'espera por 2 segundos
            Thread.Sleep(2000)
        Next
        Me.Hide()
        Exit Sub
    End Sub

 

O código do evento Change do Listbox faz com que a imagem selecionada seja exibida no picturebox:

 Private Sub lstImagem_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) 
                                                          Handles lstImagem.SelectedIndexChanged
        'atribui a imagem do listbox ao controle picturebox
        picImagem.Image = Image.FromFile(lstImagem.SelectedItem)
    End Sub

Da mesma forma o evento Change do TextBox  faz com que a nova imagem  seja exibida ao usuário:

Private Sub txtImagem_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) 
                                                      Handles txtImagem.TextChanged
        'define o modo de exibição do controle picturebox
        picImagem.SizeMode = PictureBoxSizeMode.StretchImage
        'carrega a imagem do arquivo de texto para exibição
        picImagem.Image = Image.FromFile(txtImagem.Text)
    End Sub

O código para encerrar a aplicação e o código para ativar o aplicativo de Email quando o usuário clicar no link para o email são :

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

'sai da aplicação
Application.Exit()

End
Sub
 

Private Sub LinkLabel1_LinkClicked_1(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked

'inicia a aplicação associado ao email
System.Diagnostics.Process.Start("mailto:macoratti@yahoo.com")

End Sub

Executando a aplicação e selecionando algumas imagens temos a seguinte exibição :

Ao clicar no botão para iniciar a exibição dos slides , os mesmos serão exibidos em tela cheia.

Pegue o projeto aqui : slideshow.zip

Eu sei , é apenas VB.NET , mas eu gosto...


José Carlos Macoratti