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. |