Ir para o conteúdo

Common Dialogs

Introdução

Diferentes aplicações requerem diferentes funcionalidades. No entanto, abrir um ficheiro, escolher uma cor ou uma fonte do sistema é uma funcionalidade que não difere, é comum. Para a maioria dos casos, escolher uma cor é apenas escolher uma cor e apontar um ficheiro não passa disso mesmo. Para facilitar a vida aos programadores, no que toca a reescrever soluções que são comuns a todos, existem os Common Dialogs.

Para os vários tipos de aplicação, o uso de Common Dialogs, ou ecrans comuns, tornou-se essencial: não só é tempo que se ganha, pois estamos a utilizar um recurso que é comum até com o próprio sistema operativo (e isso é, aliás, o facto que o faz ser comum no meio das aplicações) mas também é código que escusa de existir na nossa aplicação.

Podemos contar com 5 ecrãs comuns:

Ecrã Descrição
Open File Literalmente, ecran de abertura de ficheiro. Ecran utilizado para procurar um ou mais ficheiros para abrir.
Save File Literalmente, ecran de salvaguarda de ficheiro. Ecran utilizado para determinar a localização do ficheiro a escrever.
Folder Browser Literalmente, ecran de procura de pasta. Ecran utilizado para escolher ou criar uma pasta.
Color Literalmente, ecran de cor. Ecran utilizado para escolher uma cor.
Font Literalmente, ecran de fonte. Ecran utilizado para escolher uma fonte do sistema.

Importante: Existem várias propriedades para a configuração dos dialogs. Os blocos de código que se seguem representam configurações genéricas.

File Dialogs

Open File Dialog

        Dim OFD As New OpenFileDialog
        OFD.Multiselect = True
        OFD.Title = "Abrir ficheiro..."
        OFD.Filter = "Ficheiros de imagem|*.jpg;*.bmp;*png;*.gif"
        OFD.ShowDialog()

        For Each F As String In OFD.FileNames
            MsgBox("Caminho completo: " & F)
        Next
        For Each F As String In OFD.SafeFileNames
            MsgBox("Ficheiro: " & F)
        Next

Save File Dialog

        Dim SFD As New SaveFileDialog

        SFD.AddExtension = True
        SFD.SupportMultiDottedExtensions = True
        SFD.OverwritePrompt = True
        SFD.ValidateNames = True
        SFD.Filter = "Ficheiro JPG|*.jpg|Ficheiro BMP|*.bmp"
        SFD.Title = "Guardar ficheiro de imagem... "
        SFD.ShowDialog()

        MsgBox(SFD.FileName)

Entender os filtros

Para que a common dialog aplique filtros na procura de ficheiros, basta utilizar o formato: Descrição|filtro. Por exemplo: Mpeg Layer 3|*.mp3 ou até mesmo Ficheiros Zé|ze*.zeca.

Para utilizar mais do que uma extensão como filtro, basta separar por ponto e vírgula. Por exemplo: Música|*.wma;*.mp3.

Para além do wildcard * também é suportado o ?, representando um qualquer caractere. Por exemplo: Fotos da câmera|IMG????.jpg.

Combinações são também elas suportadas. Por exemplo: Os meus formatos|ze*ca.zeca;*.jpg;casa.???;img??.e??.

Utilizando mais separadores | fará com que o filtro se torne uma lista em que o filtro efectivo é apenas o seleccionado. Por exemplo: Ficheiro JPG|*.jpg|Ficheiro BMP|*.bmp.

Entender a multiselecção

No bloco de código, para abertura de ficheiro, em cima, a multiselecção encontra-se activa (OFD.Multiselect = True), permitindo ao utilizador seleccionar mais do que um ficheiro. Quando existe a possibilidade de uma multiselecção, devemos preparar a aplicação para a suportar e usamos a propriedade Filenames e SafeFileNames. Estas propriedades representam uma lista com todos os caminhos para os ficheiros seleccionados pelo utilizador. Se a multiselecção não estiver activa, utilizam-se as propriedades FileName e SafeFileName, representando apenas uma string com a informação do caminho do ficheiro.

Como evitar ou adoptar o novo sistema do Vista

Entre muitas outras propriedades interessantes, destaquemos a opção de utilizar ou não o novo sistema do Windows Vista para os seus common dialogs de ficheiros. AutoUpgradeEnabled é a propriedade que representa a opção. True fará utilizar os novos common dialogs do Windows Vista (se disponíveis), False irá abrir o convencional common dialog de ficheiros.

Entendendo as propriedades relevantes

Propriedade Descrição
CheckFileExists Útil na abertura de ficheiros. Verifica se o ficheiro que escrevemos existe.
AddExtension Útil na escrita de ficheiros. Completa o nome do ficheiro que escrevemos com o filtro seleccionado.
SupportMultiDottedExtensions Útil em ambos. Determina se queremos suportar ficheiros com mais do que um delimitador de extensão.
OverWritePrompt Útil na escrita de ficheiros. Determina se é efectuada uma pergunta antes de escrever por cima de um ficheiro existente.
ValidateNames Útil em ambos. Determina se são efectuadas averiguações quanto à validade dos caracteres utilizados para o nome do ficheiro.
Filename/Filenames Útil em ambos. Representa o caminho ou caminhos completos para os ficheiros pretendidos
SafeFileName/SafeFileNames Útil em ambos. Representa o nome do ficheiro ou ficheiros pretendidos.
MultiSelect Útil na abertura de ficheiros. Determina se é possível ou não seleccionar vários ficheiros.

Folder Browser Dialog

Folder browser dialog é um ecran que nos permite procurar por uma pasta e/ou criar uma nova pasta, se necessário.

        Dim FBD As New FolderBrowserDialog

        FBD.Description = "Onde devo guardar as minhas coisas?"
        FBD.ShowNewFolderButton = True
        FBD.ShowDialog()

        MsgBox(FBD.SelectedPath)

Entendendo as propriedades relevantes

Propriedade Descrição
ShowNewFolderButton Determina se deve aparecer o botão de criação de nova pasta.
Description Uma pequena descrição do que se pretende. Aparecerá por cima da caixa de selecção.
RootFolder Determina o directório onde se deseja começar a procura.
SelectedPath Contém o caminho completo para a pasta seleccionada.

Color Dialog

Color dialog permite ao utilizador a escolha de uma cor em palete.

        Dim CD As New ColorDialog
        CD.ShowDialog()

        Me.BackColor = CD.Color

Entendendo as propriedades relevantes

Propriedade Descrição
Color Representa a cor seleccionada.

Font Dialog

Font dialog permite ao utilizador a escolha de uma fonte e respectivos estilos.

        Dim FD As New FontDialog

        FD.ShowEffects = True
        FD.ShowColor = True
        FD.MinSize = 6
        FD.MaxSize = 72
        FD.FontMustExist = True
        FD.AllowScriptChange = False

        FD.ShowDialog()

        Dim LB As New Label
        LB.Top = 0
        LB.Left = 0
        LB.AutoSize = True
        LB.Text = "A fonte que eu escolhi, aplicada aqui"
        LB.Font = FD.Font
        LB.ForeColor = FD.Color
        LB.Visible = True
        Me.Controls.Add(LB)

Importante: O label para demonstração é criado programáticamente para minimizar falhas.

Entendendo as propriedades relevantes

Propriedade Descrição
AllowScriptChange Determina se possibilita a troca de sets de caracteres.
FontMustExist Determina se se deve averiguar a existência da fonte introduzida por o utilizador.
MaxSize Determina o tamanho da fonte máximo permitido.
MinSize Determina o tamanho da fonte mínimo permitido.
ShowColor Determina se possibilita a escolha de cor.
ShowEffects Determina se possibilita a escolha de efeitos de fonte.