Lidando com imagens
Imagens ajudam a deixar o ambiente visualmente mais agradável, seja
um quadro na parede, seja imagens em um site ou mesmo em suas
planilhas e formulários.
Você certamente já deve ter visto que na caixa de ferramentas do
formulário há um botão chamado Imagem. Clicando nele e
colocando em algum ponto do formulário você irá acrescentar um objeto
de imagem, que inicialmente vai aparecer como um quadrado cinzento sem
nada dentro.
A primeira propriedade que deve ser definida em uma imagem é
Picture, que irá carregar a imagem. Escolha uma entre os poucos
formatos suportado, as principais extensões são bmp e
wmf.
Na prática a imagem foi adicionada como se fosse 60x60. Podemos
editar a propriedade PictureSizeMode, cujos valores possíveis
são:
- fmPictureSizeModeClip: mantém o arquivo no tamanho que o
Excel importa;
- fmPictureSizeModeStretch: expande ambas as laterais até os
limites do objeto imagem, mesmo que saia da proporção - a imagem
ficará esticada se a proporção não for a mesma;
-
fmPictureSizeModeZoom: expande a imagem até os limites do objeto imagem, mantendo a
proporção em relação ao arquivo original.
Usando o valor fmPictureSizeModeZoom obtemos o seguinte
resultado:
Como pode-se ver, aparece um serrilhado, indicando que a imagem foi
estendida. Por outro lado, se definirmos as propriedades
Height e Width para 60, obtemos o seguinte
resultado:
Desconheço as razões porque as proporções no formulário são
diferentes da imagem do arquivo. O jeito é sempre efetuar testes com
as imagens antes de definir o tamanho da imagem no formulário e o
tamanho das próprias imagens que serão inseridas. Outro detalhe
importante é que fotos em formato jpg devem ser convertidas
em bmp para poder usar no formulário. Há softwares gratuitos
que permitem converter alguns formatos de arquivos de imagens, como
o Paint.Net.
Já o formato wmf (Windows MetaFile) é uma imagem em
formato vetorial, ou seja, a imagem é um conjunto de pontos, linhas
e polígonos baseados em expressões matemáticas, sendo cada linha ou
polígono equivalente a um vetor (ou caminho, como alguns softwares
de desenho vetorial chamam). Arquivos em imagem vetorial podem ser
estendidos sem perda de qualidade. Os formatos mais conhecidos e
usados são EPS (Encapsulated Post Script, que está
caindo em desuso), AI (Adobe Illustrator),
CDR (CorelDraw) e SVG (Scalable Vector Graphics), sendo somente o último livre de royalties. Um software
gratuito capaz de exportar arquivos WMF é o InkScape.
Arquivos em formato vetorial são excelentes para logotipos e
desenhos, pois podemos aumentar o tamanho sem comprometer a
qualidade da imagem. Outra vantagem é que não aparece o fundo branco
que apareceu nas telas acima. Quem usa bastante o
PowerPoint deve saber disso, devido ao costumeiro uso de
imagens nas apresentações.
Colocando uma imagem vetorial e usando
fmPictureSizeModeZoom para manter a imagem proporcionalmente
dentro dos limites temos o seguinte resultado:
De certa forma ainda aparece um serrilhado, isto é uma limitação
dos formulários no VBA, que estão limitados a 256 cores. De qualquer
forma, está melhor que a versão bmp estendida. Não dá para
saber o motivo da Microsoft não ter evoluído os formulários do
Office dos tempos do Windows 95 para o formato
Windows Presentation Foundation, muito mais modernos e
visualmente agradáveis, o que é uma pena.
Há mais propriedades interessantes que podem ser editadas em um
objeto imagem:
- BackStyle: estilo de fundo, pode ser
fmBackStyleOpaque (fundo opaco, opção padrão) ou
fmBackStyleTransparent (fundo transparente, ideal para
imagens vetoriais);
- BorderStyle: estilo da borda, pode ser
fmBorderStyleSingle (borda simples, opção padrão) ou
fmBorderStyleNone (sem borda);
- PictureAlignment: alinhamento da figura, pode ser
fmPictureAlignmentCenter (imagem no centro, opção padrão),
fmPictureAlignmentTopLeft (imagem no topo à esquerda),
fmPictureAlignmentTopRight (imagem no topo à direita),
fmPictureAlignmentBottomLeft (imagem embaixo à esquerda) e
fmPictureAlignmentBottomRight (imagem embaixo à direita);
- PictureTiling: permite que as imagens fiquem lado a lado
quando está com valor True, o padrão é False;
- SpecialEffect: efeito especial, pode ser
fmSpecialEffectFlat (sem efeito, opção padrão),
fmSpecialEffectRaised ("levantado", como se fosse um botão),
fmSpecialEffectSunken ("afundado", como um botão
pressionado), fmSpecialEffectEtched ("gravado", como se
houvesse um vinco ao redor da imagem) e
fmSpecialEffectBump ("inchaço", tem uma borda grossa). Vale
observar que alterar o valor desta propriedade altera a propriedade
BorderStyle para fmBorderStyleNone, ou seja, sem
borda.
Uma coisa interessante que é possível fazer é alterar a imagem via
código. Por exemplo, no caso de um cadastro de pessoas, um objeto
imagem pode exibir a foto da pessoa ativa no momento. Para fazer
algo do tipo, é crucial ter alguns fatores em mente:
- As imagens devem ter o mesmo tamanho, caso contrário podem ficar
deformadas ao exibir. Se você especificar que a imagem deve ser
80x100, todas deverão ter essas medidas;
- As imagens devem estar no mesmo local. O ideal é criar uma pasta
(ou diretório) no mesmo local da planilha e manter as imagens dentro
dessa pasta;
- Os nomes dos arquivos de imagens preferencialmente devem ser a
chave (código, ID ou outra forma de identificação única) e devem ter
a mesma extensão. Se você utilizar o nome de uma pessoa como nome do
arquivo certamente terá problemas com homônimos. Exceções podem ser
feitas se você estiver lidando com uma lista que não deve ser
alterada e que não tenha objetos com o mesmo nome.
Um exemplo simples para visualizar o funcionamento:
Este formulário funcionará da seguinte maneira: a caixa de seleção
tem dois valores: Homem e Mulher. Quando um valor for selecionado, a
imagem aparecerá:
O código é o seguinte:
Private Sub UserForm_Initialize()
InicializarSeletor
End Sub
Sub InicializarSeletor()
frmSexo.cmbSelecionarSexo.Clear
frmSexo.cmbSelecionarSexo.AddItem "Homem"
frmSexo.cmbSelecionarSexo.AddItem "Mulher"
End Sub
Private Sub cmbSelecionarSexo_Change()
Dim Imagem As String
Imagem = ActiveWorkbook.Path & "\Imagens\"
& _
frmSexo.cmbSelecionarSexo.Value & ".wmf"
frmSexo.imgSexo.Picture = LoadPicture(Imagem,
50, 100)
End Sub
O detalhe mais importante aqui é a forma de carregar a imagem. É
preciso usar uma função chamada LoadPicture, que colocará a
imagem dentro da propriedade Picture. Aqui usei três
argumentos: endereço do arquivo, largura e altura (estes dois últimos
são opcionais). Há um quarto parâmetro chamado flags, que pode
ser um valor da enumeração LoadPictureConstants. Os valores
possíveis são os seguintes: Default, Monochrome,
VgaColor e Color.
O exemplo acima é bem simples, mas dá uma ideia do que você pode
fazer para melhorar seus formulários. Você pode alterar uma imagem
dinamicamente conforme as necessidades: fotos de pessoas ou imagens de
produtos ajudam a incrementar o visual.
Enquanto em formulários temos limitações com formatos e cores, nas
planilhas temos muito mais opções. É possível usar imagens vetoriais
sem que aconteça o problema de serrilhado como visto anteriormente,
pois temos acesso a mais de 16 milhões de cores. Além disso, é
possível utilizar outros formatos de imagens populares, como
jpg e png. Estes, da mesma forma que o bmp,
perdem qualidade quando ampliados.
Se você tiver habilidade com desenho poderá transformar uma
planilha em um formulário. Pode começar usando algumas formas do
Office ou figuras encontradas na internet para entender o que é
possível fazer. Fiz um exemplo bem simples aqui para
demonstrar:
Perceba que aqui ocultei a barra de fórmulas, o menu, os títulos de
linhas e colunas, além da grade, tirando a chamada "aparência de
Excel". Você pode fazer isso manualmente na planilha, mas seu
usuário pode mexer. Neste caso é bom editar os eventos referentes a
essa planilha. Existem os eventos Activate e
Deactivate que, como o próprio nome indica, são processados
quando entramos ou saímos da planilha, respectivamente.
Portanto, precisamos editar o evento de entrada na planilha para
não exibir os detalhes mencionados acima. Essas propriedades são
definidas no objeto Application, que possui muitas outras
propriedades que podem ser ajustadas conforme suas necessidades.
Vejamos o que podemos fazer:
Private Sub Worksheet_Activate()
Application.ActiveWindow.DisplayGridlines =
False
Application.ActiveWindow.DisplayHeadings =
False
Application.ActiveWindow.DisplayHorizontalScrollBar = False
Application.ActiveWindow.DisplayVerticalScrollBar = False
Application.DisplayFormulaBar = False
End Sub
Os nomes das propriedades explicam bem a função.
DisplayGridlines exibe ou não as linhas de grade da planilha.
DisplayHeadings é sobre o cabeçalho de linhas e colunas da
planilha. DisplayHorizontalScrollBar e
DisplayVerticalScrollBar se referem às barras de rolagem
horizontal e vertical, respectivamente. Por fim,
DisplayFormulaBar oculta ou exibe a barra de fórmulas. Existem
muitos outros controles que podem ser definidos.
Como essas propriedades estão definidas no evento
Worksheet_Activate, sempre que o usuário entrar nessa planilha
os valores serão definidos e a planilha estará sempre com essa
aparência. Mesmo que o usuário coloque a grade, por exemplo, ao sair e
retornar à planilha a grade estará oculta de novo.
Com um pouco de prática e uma certa habilidade com imagens, você pode
transformar planilhas em formulários que certamente irão impressionar
os usuários. Certamente ainda há muito sobre imagens a aprender, mas o
que foi visto aqui é um ótimo começo.
Para dúvidas sobre o artigo, comentários ou sugestões, utilize os
comentários abaixo. Até o próximo artigo!